Skip to content

Commit

Permalink
Support both provider ID's for cmake-tools (#4587)
Browse files Browse the repository at this point in the history
  • Loading branch information
Colengms authored Nov 11, 2019
1 parent 1a7e9b9 commit a11b2ae
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 6 deletions.
6 changes: 3 additions & 3 deletions Extension/src/LanguageServer/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import * as logger from '../logger';
import { updateLanguageConfigurations, registerCommands } from './extension';
import { SettingsTracker, getTracker } from './settingsTracker';
import { getTestHook, TestHook } from '../testHook';
import { getCustomConfigProviders, CustomConfigurationProviderCollection, CustomConfigurationProvider1 } from '../LanguageServer/customProviders';
import { getCustomConfigProviders, CustomConfigurationProviderCollection, CustomConfigurationProvider1, isSameProviderExtensionId } from '../LanguageServer/customProviders';
import { ABTestSettings, getABTestSettings } from '../abTesting';
import * as fs from 'fs';
import * as os from 'os';
Expand Down Expand Up @@ -1167,7 +1167,7 @@ export class DefaultClient implements Client {
},
() => ask.Value = false);
}
} else if (selectedProvider === provider.extensionId) {
} else if (isSameProviderExtensionId(selectedProvider, provider.extensionId)) {
onRegistered();
telemetry.logLanguageServerEvent("customConfigurationProvider", { "providerId": provider.extensionId });
} else if (selectedProvider === provider.name) {
Expand Down Expand Up @@ -1974,7 +1974,7 @@ export class DefaultClient implements Client {
this.model.activeConfigName.Value = configurations[params.currentConfiguration].name;
}).then(() => {
let newProvider: string = this.configuration.CurrentConfigurationProvider;
if (this.configurationProvider !== newProvider) {
if (!isSameProviderExtensionId(newProvider, this.configurationProvider)) {
this.configurationProvider = newProvider;
this.updateCustomConfigurations();
this.updateCustomBrowseConfiguration();
Expand Down
27 changes: 27 additions & 0 deletions Extension/src/LanguageServer/customProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ export interface CustomConfigurationProvider1 extends CustomConfigurationProvide
readonly version: Version;
}

const oldCmakeToolsExtensionId: string = "vector-of-bool.cmake-tools";
const newCmakeToolsExtensionId: string = "ms-vscode.cmake-tools";

/**
* Wraps the incoming CustomConfigurationProvider so that we can treat all of them as if they were the same version (e.g. latest)
*/
Expand Down Expand Up @@ -185,6 +188,18 @@ export class CustomConfigurationProviderCollection {
if (this.providers.has(id)) {
return this.providers.get(id);
}

if (typeof provider === "string") {
// Consider old and new names for cmake-tools as equivalent
if (provider === newCmakeToolsExtensionId) {
id = oldCmakeToolsExtensionId;
} else if (provider === oldCmakeToolsExtensionId) {
id = newCmakeToolsExtensionId;
}
if (this.providers.has(id)) {
return this.providers.get(id);
}
}
return null;
}

Expand Down Expand Up @@ -231,3 +246,15 @@ let providerCollection: CustomConfigurationProviderCollection = new CustomConfig
export function getCustomConfigProviders(): CustomConfigurationProviderCollection {
return providerCollection;
}

export function isSameProviderExtensionId(settingExtensionId: string, providerExtensionId: string): boolean {
if (settingExtensionId === providerExtensionId) {
return true;
}
// Consider old and new names for cmake-tools as equivalent
if ((settingExtensionId === newCmakeToolsExtensionId && providerExtensionId === oldCmakeToolsExtensionId)
|| (settingExtensionId === oldCmakeToolsExtensionId && providerExtensionId === newCmakeToolsExtensionId)) {
return true;
}
return false;
}
4 changes: 2 additions & 2 deletions Extension/src/LanguageServer/ui.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import * as vscode from 'vscode';
import { Client } from './client';
import { ReferencesCommandMode, referencesCommandModeToString } from './references';
import { getCustomConfigProviders, CustomConfigurationProviderCollection } from './customProviders';
import { getCustomConfigProviders, CustomConfigurationProviderCollection, isSameProviderExtensionId } from './customProviders';
import * as nls from 'vscode-nls';

nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })();
Expand Down Expand Up @@ -195,7 +195,7 @@ export class UI {
let items: KeyedQuickPickItem[] = [];
providers.forEach(provider => {
let label: string = provider.name;
if (provider.extensionId === currentProvider) {
if (isSameProviderExtensionId(currentProvider, provider.extensionId)) {
label += ` (${localize("active", "active")})`;
}
items.push({ label: label, description: "", key: provider.extensionId });
Expand Down
2 changes: 1 addition & 1 deletion Extension/ui/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,7 @@

<div class="section">
<div class="section-title" data-loc-id="configuration.provider">Configuration provider</div>
<div class="section-text" data-loc-id="configuration.provider.description">The ID of a VS Code extension that can provide IntelliSense configuration information for source files. For example, use the VS Code extension ID <code>vector-of-bool.cmake-tools</code> to provide configuration information from the CMake Tools extension.</div>
<div class="section-text" data-loc-id="configuration.provider.description">The ID of a VS Code extension that can provide IntelliSense configuration information for source files. For example, use the VS Code extension ID <code>ms-vscode.cmake-tools</code> to provide configuration information from the CMake Tools extension.</div>
<div>
<input name="inputValue" id="configurationProvider" style="width: 290px"></input>
</div>
Expand Down

0 comments on commit a11b2ae

Please sign in to comment.