diff --git a/extensions/css-language-features/client/src/cssMain.ts b/extensions/css-language-features/client/src/cssMain.ts index 7520e61b209..ee8c9973d3a 100644 --- a/extensions/css-language-features/client/src/cssMain.ts +++ b/extensions/css-language-features/client/src/cssMain.ts @@ -11,7 +11,7 @@ const localize = nls.loadMessageBundle(); import { languages, window, commands, ExtensionContext, Range, Position, CompletionItem, CompletionItemKind, TextEdit, SnippetString, workspace } from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind, Disposable } from 'vscode-languageclient'; -import { getCustomDataPathsInAllWorkspaces } from './customData'; +import { getCustomDataPathsInAllWorkspaces, getCustomDataPathsFromAllExtensions } from './customData'; // this method is called when vs code is activated export function activate(context: ExtensionContext) { @@ -31,7 +31,10 @@ export function activate(context: ExtensionContext) { let documentSelector = ['css', 'scss', 'less']; - let dataPaths = getCustomDataPathsInAllWorkspaces(workspace.workspaceFolders); + let dataPaths = [ + ...getCustomDataPathsInAllWorkspaces(workspace.workspaceFolders), + ...getCustomDataPathsFromAllExtensions() + ]; // Options to control the language client let clientOptions: LanguageClientOptions = { diff --git a/extensions/css-language-features/client/src/customData.ts b/extensions/css-language-features/client/src/customData.ts index 25cc95ccc92..c9954de8c51 100644 --- a/extensions/css-language-features/client/src/customData.ts +++ b/extensions/css-language-features/client/src/customData.ts @@ -4,11 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import * as path from 'path'; -import { workspace, WorkspaceFolder } from 'vscode'; +import { workspace, WorkspaceFolder, extensions } from 'vscode'; interface ExperimentalConfig { experimental?: { - customData?: string[] + customData?: string[]; }; } @@ -28,7 +28,6 @@ export function getCustomDataPathsInAllWorkspaces(workspaceFolders: WorkspaceFol wfCSSConfig.workspaceFolderValue.experimental && wfCSSConfig.workspaceFolderValue.experimental.customData ) { - wfCSSConfig.workspaceFolderValue.experimental.customData.forEach(p => [ dataPaths.push(path.resolve(wf.uri.fsPath, p)) ]); @@ -37,3 +36,20 @@ export function getCustomDataPathsInAllWorkspaces(workspaceFolders: WorkspaceFol return dataPaths; } + +export function getCustomDataPathsFromAllExtensions(): string[] { + const dataPaths: string[] = []; + + for (const extension of extensions.all) { + const contributes = extension.packageJSON && extension.packageJSON.contributes; + + if (contributes && contributes.css && contributes.css.customData && Array.isArray(contributes.css.customData)) { + const relativePaths: string[] = contributes.css.customData; + relativePaths.forEach(rp => { + dataPaths.push(path.resolve(extension.extensionPath, rp)); + }); + } + } + + return dataPaths; +}