diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf181f2..7dba736 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,62 +1,66 @@
# Change Log
+# [0.0.16]
+
+* Added rudimentary support for `${fileWorkspaceFolder}` in `iwyu.compile_commands` settings.
+
# [0.0.15]
-Fixed https://github.com/helly25/vscode-iwyu/issues/2. When the `compile_commands.json` fiel cannot be found the extension would not be able to initialize.
-Fixed and issue with the actual setting name for the `compile_commands.json` file. The correct setting name is
+* Fixed https://github.com/helly25/vscode-iwyu/issues/2. When the `compile_commands.json` file cannot be found the extension would not be able to initialize.
+* Fixed and issue with the actual setting name for the `compile_commands.json` file. The correct setting name is
`iwyu.compile_commands` as documented.
-Renamed settings `iwyu.diagnostics` to `iwyu.diagnostics.unused_includes`.
+* Renamed settings `iwyu.diagnostics` to `iwyu.diagnostics.unused_includes`.
# [0.0.14]
-Fix include guard trigger.
-Refactor most extension code to use class Extension.
+* Fixed include guard trigger.
+* Refactored most extension code to use class Extension.
# [0.0.13]
-Bad release
+Bad release!
# [0.0.12]
-Update README.md.
+* Updated README.md.
# [0.0.11]
-Only check `iwyu.diagnostics.include_guard` once per file.
-Fix lookup of setting `iwyu.diagnostics.include_guard`.
-Provide a direct link for diagnostics to the documentation.
+* Changed to only check `iwyu.diagnostics.include_guard` once per file.
+* Fixed lookup of setting `iwyu.diagnostics.include_guard`.
+* Provided a direct link for diagnostics to the documentation.
# [0.0.10]
-Disable include guard checks by default. Seeting `iwyu.diagnostics.include_guard` to ".
+* Disabled include guard checks by default. Seeting `iwyu.diagnostics.include_guard` to ".
# [0.0.9]
-Add support for include guard detection and correction.
-Add new settings:
-. `iwyu.diagnostics.include_guard_files`: `Regular expression for files that should be checked for include guards."
-. `iwyu.diagnostics.include_guard`: If this is non empty, then include guards are checked. The relative filename is denoted as '${file}' (as-is) or '${FILE}' (uppercase) , so in order to require include guards that end in a '_ thi must be set to '${file}_'.
+* Added support for include guard detection and correction.
+* Added new settings:
+ - `iwyu.diagnostics.include_guard_files`: `Regular expression for files that should be checked for include guards."
+ - `iwyu.diagnostics.include_guard`: If this is non empty, then include guards are checked. The relative filename is denoted as '${file}' (as-is) or '${FILE}' (uppercase) , so in order to require include guards that end in a '_ thi must be set to '${file}_'.
# [0.0.8]
-Fix settings default for `iwyu.iwyu.keep`.
-Change default for `iwyu.diagnostics.iwyu_interval` to 5 (seconds).
+* Fixed settings default for `iwyu.iwyu.keep`.
+* Changed default for `iwyu.diagnostics.iwyu_interval` to 5 (seconds).
# [0.0.7]
-Add new command `Include What You Use (all targets)`. See README.md for details.
+* Added new command `Include What You Use (all targets)`. See README.md for details.
# [0.0.6]
-Added new config settings:
-- `iwyu.diagnostics.full_line_squiggles`: Whether to underline the whole line with squiggles or only the actual include part. The error is technically only on the actual include (from `#` to eiter `>` or second `"`) but tools commonly underline the whole line and the fix script will also remove the whole line.
-- Use LogOutputChannel instead of OutputChannel for better log output control.
-- Also remove setting `iwyu.debug`.
+* Added new config settings:
+ - `iwyu.diagnostics.full_line_squiggles`: Whether to underline the whole line with squiggles or only the actual include part. The error is technically only on the actual include (from `#` to eiter `>` or second `"`) but tools commonly underline the whole line and the fix script will also remove the whole line.
+ - Use LogOutputChannel instead of OutputChannel for better log output control.
+ - Also removed setting `iwyu.debug`.
# [0.0.5]
-- Per file IWYU data handling.
-- Improved header processing:
+* Fixed per file IWYU data handling.
+* Improved header processing:
- Rename `iwyu.fix.safe` to `iwyu.fix.safe_headers` to match the actual argument name.
- Change `iwyu.fix.safe_headers` to default to false, so that the tool works for headers by default.
- Provide `--basedir` to `fix_includes.py` invocation to explicitly apply fixes only to the selected file.
@@ -66,8 +70,8 @@ Added new config settings:
## [0.0.4]
-- Speed up diagnostics by limiting how often iwyu is run and apply heuristics to early skip source scanning.
-- Add new config settings:
+* Sped up diagnostics by limiting how often iwyu is run and apply heuristics to early skip source scanning.
+* Added new config settings:
- `iwyu.diagnostics.iwyu_interval`: Minimum interval time in seconds between iwyu calls.
- `iwyu.diagnostics.only_re`: Only compute diagnostics for files that match this regexp.
- `iwyu.diagnostics.scan_min`: Scan at least this many lines, if no include is found, then stop.
@@ -75,13 +79,13 @@ Added new config settings:
## [0.0.3]
-- Add diagnostic support
-- Add quickfix support
+* Added diagnostic support.
+* Added quickfix support.
## [0.0.2]
-- Fix image link
+* Fixed image link.
## [0.0.1]
-- Initial release
+* Initial release.
diff --git a/src/extension.ts b/src/extension.ts
index c6862a1..c804030 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -168,7 +168,7 @@ class CompileCommandsData {
this.compileCommands[fname] = new CompileCommand(entry, directory);
}
}
- catch(err) {
+ catch (err) {
let error = "Bad `iwyu.compile_commands` setting";
log(ERROR, error + "'" + compileCommandsJson + "': " + err);
vscode.window.showErrorMessage(error + ". Please check your settings and ensure the `compile_commands.json` file is in the specified location.
" + err);
@@ -285,11 +285,19 @@ class ConfigData {
return this.compileCommandsData.compileCommands[fname] || null;
}
+ replaceWorkspaceVars(input: string): string {
+ input = input.replace("${workspaceRoot}", this.workspacefolder);
+ input = input.replace("${workspaceFolder}", this.workspacefolder);
+ let uri = vscode.window.activeTextEditor?.document?.uri;
+ let path = uri ? vscode.workspace.getWorkspaceFolder(uri)?.uri.fsPath : "";
+ input = input.replace("${fileWorkspaceFolder}", typeof path === "string" ? path : "");
+ return input;
+ }
+
compileCommandsJson(): string {
- return this.config
- .get("compile_commands", "${workspaceFolder}/XXX/compile_commands.json")
- .replace("${workspaceRoot}", this.workspacefolder)
- .replace("${workspaceFolder}", this.workspacefolder);
+ let compileCommandsJsonDefault = "${workspaceFolder}/compile_commands.json";
+ let compileCommandsJson = this.config.get("compile_commands", compileCommandsJsonDefault);
+ return this.replaceWorkspaceVars(compileCommandsJson);
}
updateConfig() {
@@ -304,7 +312,7 @@ class ConfigData {
this.compileCommandsData = this.parseCompileCommands();
}
}
- catch(err) {
+ catch (err) {
log(ERROR, "Bad `iwyu.compile_commands` setting: '" + compileCommandsJson + "': " + err);
}
}