Skip to content

Commit 54af67e

Browse files
committed
Address issues with C_Cpp.default.compileCommands
1 parent 421300d commit 54af67e

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

Extension/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,9 @@
707707
"default": []
708708
}
709709
],
710+
"default": [
711+
""
712+
],
710713
"markdownDescription": "%c_cpp.configuration.default.compileCommands.markdownDescription%",
711714
"scope": "machine-overridable"
712715
},

Extension/src/LanguageServer/settings.ts

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -402,26 +402,19 @@ export class CppSettings extends Settings {
402402
public get defaultDotconfig(): string | undefined { return changeBlankStringToUndefined(this.getAsStringOrUndefined("default.dotConfig")); }
403403
public get defaultMacFrameworkPath(): string[] | undefined { return this.getArrayOfStringsWithUndefinedDefault("default.macFrameworkPath"); }
404404
public get defaultWindowsSdkVersion(): string | undefined { return changeBlankStringToUndefined(this.getAsStringOrUndefined("default.windowsSdkVersion")); }
405-
public get defaultForcedInclude(): string[] | undefined { return this.getArrayOfStringsWithUndefinedDefault("default.forcedInclude"); }
406-
public get defaultIntelliSenseMode(): string | undefined { return this.getAsStringOrUndefined("default.intelliSenseMode"); }
407405
public get defaultCompileCommands(): string[] | undefined {
408-
// Try to get the value as a string.
409-
const value: string | undefined = this.getAsStringOrUndefined("default.compileCommands");
410-
if (value !== undefined) {
411-
if (changeBlankStringToUndefined(value) === undefined) {
412-
return undefined;
413-
}
414-
return [value];
406+
const value: any = super.Section.get<any>("default.compileCommands");
407+
if (isString(value)) {
408+
return value.length > 0 ? [value] : undefined;
415409
}
416-
417-
// value is not a string, try to get it as an array of strings instead.
418-
let valueArray: string[] | undefined = this.getAsArrayOfStringsOrUndefined("default.compileCommands");
419-
valueArray = valueArray?.filter((value: string) => value.length > 0);
420-
if (valueArray?.length === 0) {
421-
return undefined;
410+
if (isArrayOfString(value)) {
411+
const result = value.filter(x => x.length > 0);
412+
return result.length > 0 ? result : undefined;
422413
}
423-
return valueArray;
414+
return undefined;
424415
}
416+
public get defaultForcedInclude(): string[] | undefined { return this.getArrayOfStringsWithUndefinedDefault("default.forcedInclude"); }
417+
public get defaultIntelliSenseMode(): string | undefined { return this.getAsStringOrUndefined("default.intelliSenseMode"); }
425418
public get defaultCompilerPath(): string | null { return this.getAsString("default.compilerPath", true); }
426419

427420
public set defaultCompilerPath(value: string) {

Extension/src/LanguageServer/settingsTracker.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ export class SettingsTracker {
108108
return "<invalid>";
109109
}
110110
return val;
111+
} else if (curSetting["oneOf"]) {
112+
// Currently only C_Cpp.default.compileCommands uses this case.
113+
if (curSetting["oneOf"].some((x: any) => this.typeMatch(val, x.type))) {
114+
return val;
115+
}
111116
} else if (val === curSetting["default"]) {
112117
// C_Cpp.default.browse.path is a special case where the default value is null and doesn't match the type definition.
113118
return val;
@@ -206,7 +211,7 @@ export class SettingsTracker {
206211
if (value && value.length > maxSettingLengthForTelemetry) {
207212
value = value.substring(0, maxSettingLengthForTelemetry) + "...";
208213
}
209-
return {key: key, value: value};
214+
return { key: key, value: value };
210215
}
211216
return undefined;
212217
}

0 commit comments

Comments
 (0)