Skip to content

Commit f88bae2

Browse files
committed
Send include cleanup editorconfig preferences
1 parent 26f1df0 commit f88bae2

3 files changed

Lines changed: 69 additions & 9 deletions

File tree

‎Extension/src/LanguageServer/client.ts‎

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import { CustomConfigurationProvider1, getCustomConfigProviders, isSameProviderE
5555
import { DataBinding } from './dataBinding';
5656
import { cachedEditorConfigSettings, getEditorConfigSettings } from './editorConfig';
5757
import { CppSourceStr, clients, configPrefix, initializeIntervalTimer, isWritingCrashCallStack, updateLanguageConfigurations, usesCrashHandler, watchForCrashes } from './extension';
58+
import { IncludeCleanupPreferences, getIncludeCleanupPreferences } from './includeCleanupEditorConfig';
5859
import { LanguageClient } from './languageClient';
5960
import { LocalizeStringParams, getLocaleId, getLocalizedString } from './localization';
6061
import { PersistentFolderState, PersistentState, PersistentWorkspaceState } from './persistentState';
@@ -511,6 +512,7 @@ interface TagParseStatus {
511512
interface VisibleEditorInfo {
512513
visibleRanges: Range[];
513514
originalEncoding: string;
515+
includeCleanupPreferences: IncludeCleanupPreferences;
514516
}
515517

516518
interface DidChangeVisibleTextEditorsParams {
@@ -1929,9 +1931,11 @@ export class DefaultClient implements Client {
19291931
// First, we just concat all ranges for the same file.
19301932
const uri: string = editor.document.uri.toString();
19311933
if (!visibileEditorInfo[uri]) {
1934+
const editorConfigSettings: any = getEditorConfigSettings(editor.document.uri.fsPath);
19321935
visibileEditorInfo[uri] = {
19331936
visibleRanges: [],
1934-
originalEncoding: editor.document.encoding
1937+
originalEncoding: editor.document.encoding,
1938+
includeCleanupPreferences: getIncludeCleanupPreferences(editorConfigSettings)
19351939
};
19361940
}
19371941
visibileEditorInfo[uri].visibleRanges = visibileEditorInfo[uri].visibleRanges.concat(editor.visibleRanges.map(makeLspRange));
@@ -2684,6 +2688,15 @@ export class DefaultClient implements Client {
26842688

26852689
private associations_for_did_change?: Set<string>;
26862690

2691+
private refreshEditorConfigSettings(): void {
2692+
cachedEditorConfigSettings.clear();
2693+
cachedEditorConfigLookups.clear();
2694+
this.updateActiveDocumentTextOptions();
2695+
2696+
const cppEditors: vscode.TextEditor[] = vscode.window.visibleTextEditors.filter(editor => util.isCpp(editor.document));
2697+
void this.onDidChangeVisibleTextEditors(cppEditors).catch(logAndReturn.undefined);
2698+
}
2699+
26872700
/**
26882701
* listen for file created/deleted events under the ${workspaceFolder} folder
26892702
*/
@@ -2704,9 +2717,7 @@ export class DefaultClient implements Client {
27042717
}
27052718
const fileName: string = path.basename(uri.fsPath).toLowerCase();
27062719
if (fileName === ".editorconfig") {
2707-
cachedEditorConfigSettings.clear();
2708-
cachedEditorConfigLookups.clear();
2709-
this.updateActiveDocumentTextOptions();
2720+
this.refreshEditorConfigSettings();
27102721
}
27112722
if (fileName === ".clang-format" || fileName === "_clang-format") {
27122723
cachedEditorConfigLookups.clear();
@@ -2732,9 +2743,7 @@ export class DefaultClient implements Client {
27322743
const dotIndex: number = uri.fsPath.lastIndexOf('.');
27332744
const fileName: string = path.basename(uri.fsPath).toLowerCase();
27342745
if (fileName === ".editorconfig") {
2735-
cachedEditorConfigSettings.clear();
2736-
cachedEditorConfigLookups.clear();
2737-
this.updateActiveDocumentTextOptions();
2746+
this.refreshEditorConfigSettings();
27382747
}
27392748
const ext: string | undefined = dotIndex !== -1 ? uri.fsPath.substring(dotIndex + 1) : undefined;
27402749
const isTrackedFile: boolean = hasNativeFileTypeMappings()
@@ -2759,8 +2768,7 @@ export class DefaultClient implements Client {
27592768
}
27602769
const fileName: string = path.basename(uri.fsPath).toLowerCase();
27612770
if (fileName === ".editorconfig") {
2762-
cachedEditorConfigSettings.clear();
2763-
cachedEditorConfigLookups.clear();
2771+
this.refreshEditorConfigSettings();
27642772
}
27652773
if (fileName === ".clang-format" || fileName === "_clang-format") {
27662774
cachedEditorConfigLookups.clear();
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export interface IncludeCleanupPreferences {
2+
alternateFiles: string;
3+
excludedFiles: string;
4+
replacementFiles: string;
5+
requiredFiles: string;
6+
}
7+
8+
function getStringSetting(settings: any, key: string): string {
9+
const value: unknown = settings?.[key];
10+
return typeof value === 'string' && value.toLowerCase() !== 'unset' ? value : '';
11+
}
12+
13+
export function getIncludeCleanupPreferences(settings: any): IncludeCleanupPreferences {
14+
return {
15+
alternateFiles: getStringSetting(settings, 'cpp_include_cleanup_alternate_files'),
16+
excludedFiles: getStringSetting(settings, 'cpp_include_cleanup_excluded_files'),
17+
replacementFiles: getStringSetting(settings, 'cpp_include_cleanup_replacement_files'),
18+
requiredFiles: getStringSetting(settings, 'cpp_include_cleanup_required_files')
19+
};
20+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { deepStrictEqual } from 'assert';
2+
import { describe, it } from 'mocha';
3+
import { getIncludeCleanupPreferences } from '../../src/LanguageServer/includeCleanupEditorConfig';
4+
5+
describe('Include Cleanup editorconfig settings', () => {
6+
it('maps semantic preference strings', () => {
7+
deepStrictEqual(getIncludeCleanupPreferences({
8+
cpp_include_cleanup_alternate_files: 'umbrella.h:internal.h',
9+
cpp_include_cleanup_excluded_files: 'generated.h',
10+
cpp_include_cleanup_replacement_files: 'stdio.h:cstdio',
11+
cpp_include_cleanup_required_files: 'atlwin.h:atlbase.h'
12+
}), {
13+
alternateFiles: 'umbrella.h:internal.h',
14+
excludedFiles: 'generated.h',
15+
replacementFiles: 'stdio.h:cstdio',
16+
requiredFiles: 'atlwin.h:atlbase.h'
17+
});
18+
});
19+
20+
it('ignores unset and non-string values', () => {
21+
deepStrictEqual(getIncludeCleanupPreferences({
22+
cpp_include_cleanup_alternate_files: 'unset',
23+
cpp_include_cleanup_excluded_files: true,
24+
cpp_include_cleanup_replacement_files: 42
25+
}), {
26+
alternateFiles: '',
27+
excludedFiles: '',
28+
replacementFiles: '',
29+
requiredFiles: ''
30+
});
31+
});
32+
});

0 commit comments

Comments
 (0)