Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/job-compile-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,11 @@ jobs:
run: yarn test --scenario=SingleRootProject
working-directory: Extension

- name: Run SimpleCppProject tests (Windows)
if: ${{ inputs.platform == 'windows' }}
run: yarn test --scenario=SimpleCppProject
working-directory: Extension

- name: Run E2E IntelliSense features tests (Windows)
if: ${{ inputs.platform == 'windows' }}
run: yarn test --scenario=MultirootDeadlockTest
Expand All @@ -117,6 +122,13 @@ jobs:
run: yarn test --scenario=SingleRootProject
working-directory: Extension

- name: Run SimpleCppProject tests (linux/macOS)
if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }}
uses: coactions/setup-xvfb@b6b4fcfb9f5a895edadc3bc76318fae0ac17c8b3 # v1.0.1
with:
run: yarn test --scenario=SimpleCppProject
working-directory: Extension

- name: Run E2E IntelliSense features tests (linux/macOS)
if: ${{ inputs.platform == 'mac' || inputs.platform == 'linux' }}
uses: coactions/setup-xvfb@b6b4fcfb9f5a895edadc3bc76318fae0ac17c8b3 # v1.0.1
Expand Down
17 changes: 16 additions & 1 deletion Extension/src/LanguageServer/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2304,9 +2304,24 @@ export class DefaultClient implements Client {

// Wrap the provider lookup in a single task, so we can apply a timeout to the entire duration.
const provideConfigurationAsync: () => Thenable<SourceFileConfigurationItem[] | undefined> = async () => {
const supportedUris: vscode.Uri[] = [];
for (const uri of docUris) {
Comment thread
sean-mcmanus marked this conversation as resolved.
try {
if (!await provider.canProvideConfiguration(uri, tokenSource.token)) {
continue;
}
} catch {
console.warn("Caught exception from canProvideConfiguration");
}
supportedUris.push(uri);
}
if (supportedUris.length === 0) {
return [];
}

let configs: util.Mutable<SourceFileConfigurationItem>[] = [];
try {
configs = await provider.provideConfigurations(docUris, tokenSource.token);
configs = await provider.provideConfigurations(supportedUris, tokenSource.token);
} catch {
console.warn("Caught exception from provideConfigurations");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ async function changeCppProperties(cppProperties: config.ConfigurationJson, _dis
suite("extensibility tests v3", function(): void {
let cpptools: apit.CppToolsTestApi;
let lastResult: api.SourceFileConfigurationItem[];
let configurationProvidedBeforeCanProvide: boolean = false;
const supportedUris: Set<string> = new Set<string>();
const defaultConfig: api.SourceFileConfiguration = {
includePath: [ "${workspaceFolder}", "/v3/folder" ],
defines: [ "${workspaceFolder}" ],
Expand All @@ -156,14 +158,19 @@ suite("extensibility tests v3", function(): void {
const provider: api.CustomConfigurationProvider = {
name: "cpptoolsTest-v3",
extensionId: "ms-vscode.cpptools-test3",
canProvideConfiguration(_document: vscode.Uri): Thenable<boolean> {
canProvideConfiguration(document: vscode.Uri): Thenable<boolean> {
supportedUris.add(document.toString());
return Promise.resolve(true);
},
provideConfigurations(uris: vscode.Uri[]): Thenable<api.SourceFileConfigurationItem[]> {
const result: api.SourceFileConfigurationItem[] = [];
uris.forEach(uri => {
const uriString: string = uri.toString();
if (!supportedUris.has(uriString)) {
configurationProvidedBeforeCanProvide = true;
}
result.push({
uri: uri.toString(),
uri: uriString,
configuration: defaultConfig
});
});
Expand Down Expand Up @@ -220,10 +227,15 @@ suite("extensibility tests v3", function(): void {
disposables.push(testHook.IntelliSenseStatusChanged(result => {
result = result as apit.IntelliSenseStatus;
if (result.filename === "main3.cpp" && result.status === apit.Status.IntelliSenseReady) {
const expected: api.SourceFileConfigurationItem[] = [ {uri: uri.toString(), configuration: defaultConfig} ];
assert.deepEqual(lastResult, expected);
assert.deepEqual(lastBrowseResult, defaultFolderBrowseConfig);
resolve();
try {
const expected: api.SourceFileConfigurationItem[] = [ {uri: uri.toString(), configuration: defaultConfig} ];
assert.strictEqual(configurationProvidedBeforeCanProvide, false);
Comment thread
sean-mcmanus marked this conversation as resolved.
assert.deepEqual(lastResult, expected);
assert.deepEqual(lastBrowseResult, defaultFolderBrowseConfig);
resolve();
} catch (error) {
reject(error);
}
}
}));
setTimeout(() => { reject(new Error("timeout")); }, testHelpers.defaultTimeout);
Expand Down
Loading