diff --git a/extensions/css-language-features/.vscode/settings.json b/extensions/css-language-features/.vscode/settings.json new file mode 100644 index 00000000000..5b30e2983c2 --- /dev/null +++ b/extensions/css-language-features/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "prettier.semi": true, + "prettier.singleQuote": true, + "prettier.printWidth": 120, +} \ No newline at end of file diff --git a/extensions/css-language-features/server/package.json b/extensions/css-language-features/server/package.json index b48257bb0c5..678ddaec04c 100644 --- a/extensions/css-language-features/server/package.json +++ b/extensions/css-language-features/server/package.json @@ -9,7 +9,7 @@ }, "main": "./out/cssServerMain", "dependencies": { - "vscode-css-languageservice": "^3.0.13-next.7", + "vscode-css-languageservice": "^3.0.13-next.8", "vscode-languageserver": "^5.1.0" }, "devDependencies": { diff --git a/extensions/css-language-features/server/src/cssServerMain.ts b/extensions/css-language-features/server/src/cssServerMain.ts index c5fd3bdb65d..3ef166f1b80 100644 --- a/extensions/css-language-features/server/src/cssServerMain.ts +++ b/extensions/css-language-features/server/src/cssServerMain.ts @@ -7,15 +7,14 @@ import { createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder } from 'vscode-languageserver'; import URI from 'vscode-uri'; -import * as fs from 'fs'; import { TextDocument, CompletionList, Position } from 'vscode-languageserver-types'; -import { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet, CSSData } from 'vscode-css-languageservice'; +import { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet } from 'vscode-css-languageservice'; import { getLanguageModelCache } from './languageModelCache'; import { getPathCompletionParticipant } from './pathCompletion'; import { formatError, runSafe } from './utils/runner'; import { getDocumentContext } from './utils/documentContext'; -import { parseCSSData } from './utils/languageFacts'; +import { getDataProviders } from './customData'; export interface Settings { css: LanguageSettings; @@ -66,17 +65,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => { } const dataPaths: string[] = params.initializationOptions.dataPaths; - - const customDataCollections: CSSData[] = []; - - dataPaths.forEach(p => { - if (fs.existsSync(p)) { - const data = parseCSSData(fs.readFileSync(p, 'utf-8')); - customDataCollections.push(data); - } else { - return; - } - }); + const customDataProviders = getDataProviders(dataPaths); function getClientCapability(name: string, def: T) { const keys = name.split('.'); @@ -93,9 +82,9 @@ connection.onInitialize((params: InitializeParams): InitializeResult => { scopedSettingsSupport = !!getClientCapability('workspace.configuration', false); foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE); - languageServices.css = getCSSLanguageService({ customDataCollections }); - languageServices.scss = getSCSSLanguageService({ customDataCollections }); - languageServices.less = getLESSLanguageService({ customDataCollections }); + languageServices.css = getCSSLanguageService({ customDataProviders }); + languageServices.scss = getSCSSLanguageService({ customDataProviders }); + languageServices.less = getLESSLanguageService({ customDataProviders }); const capabilities: ServerCapabilities = { // Tell the client that the server works in FULL text document sync mode diff --git a/extensions/css-language-features/server/src/customData.ts b/extensions/css-language-features/server/src/customData.ts new file mode 100644 index 00000000000..3b253648d42 --- /dev/null +++ b/extensions/css-language-features/server/src/customData.ts @@ -0,0 +1,47 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { CSSData, ICSSDataProvider } from 'vscode-css-languageservice'; +import * as fs from 'fs'; + +export function getDataProviders(dataPaths: string[]): ICSSDataProvider[] { + const providers = dataPaths.map(p => { + if (fs.existsSync(p)) { + const data = parseCSSData(fs.readFileSync(p, 'utf-8')); + return { + provideProperties: () => data.properties || [], + provideAtDirectives: () => data.atDirectives || [], + providePseudoClasses: () => data.pseudoClasses || [], + providePseudoElements: () => data.pseudoElements || [] + }; + } else { + return { + provideProperties: () => [], + provideAtDirectives: () => [], + providePseudoClasses: () => [], + providePseudoElements: () => [] + }; + } + }); + + return providers; +} + +function parseCSSData(source: string): CSSData { + let rawData: any; + + try { + rawData = JSON.parse(source); + } catch (err) { + return {}; + } + + return { + properties: rawData.properties || [], + atDirectives: rawData.atdirectives || [], + pseudoClasses: rawData.pseudoclasses || [], + pseudoElements: rawData.pseudoelements || [] + }; +} diff --git a/extensions/css-language-features/server/src/utils/languageFacts.ts b/extensions/css-language-features/server/src/utils/languageFacts.ts deleted file mode 100644 index c6d9b2ee641..00000000000 --- a/extensions/css-language-features/server/src/utils/languageFacts.ts +++ /dev/null @@ -1,23 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { CSSData } from 'vscode-css-languageservice'; - -export function parseCSSData(source: string): CSSData { - let rawData: any; - - try { - rawData = JSON.parse(source); - } catch (err) { - return {}; - } - - return { - properties: rawData.properties || [], - atDirectives: rawData.atdirectives || [], - pseudoClasses: rawData.pseudoclasses || [], - pseudoElements: rawData.pseudoelements || [] - }; -} diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock index 53a82e931a8..af0f5782494 100644 --- a/extensions/css-language-features/server/yarn.lock +++ b/extensions/css-language-features/server/yarn.lock @@ -229,10 +229,10 @@ supports-color@5.4.0: dependencies: has-flag "^3.0.0" -vscode-css-languageservice@^3.0.13-next.7: - version "3.0.13-next.7" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13-next.7.tgz#48392edbf35ce60c54aeaf8d3e83c994d6c4c84e" - integrity sha512-2Z28n0CVwwNpdDmoIbjUMJPnchm+eRJE/PhhjXss/p0CnSJfXzbll3Ay1V+nDLW2NIGap0CJFbbfT+cilyivIA== +vscode-css-languageservice@^3.0.13-next.8: + version "3.0.13-next.8" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13-next.8.tgz#3e019c9166914fcbd8b71530ff32b438698206fa" + integrity sha512-YjoIMCvZSegs7UOogehQjrfNybBL3MDVN2jx/uxFFw0VKFGAiyZkjfQiipEg36jbKL4LKHiBUoutoHYMF2PGfw== dependencies: vscode-languageserver-types "^3.13.0" vscode-nls "^4.0.0"