Adopt new css provider interface

This commit is contained in:
Pine Wu
2019-01-27 19:03:09 -08:00
parent 74e267efdd
commit aad260bc7d
6 changed files with 63 additions and 45 deletions

View File

@@ -0,0 +1,5 @@
{
"prettier.semi": true,
"prettier.singleQuote": true,
"prettier.printWidth": 120,
}

View File

@@ -9,7 +9,7 @@
}, },
"main": "./out/cssServerMain", "main": "./out/cssServerMain",
"dependencies": { "dependencies": {
"vscode-css-languageservice": "^3.0.13-next.7", "vscode-css-languageservice": "^3.0.13-next.8",
"vscode-languageserver": "^5.1.0" "vscode-languageserver": "^5.1.0"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -7,15 +7,14 @@ import {
createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder createConnection, IConnection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder
} from 'vscode-languageserver'; } from 'vscode-languageserver';
import URI from 'vscode-uri'; import URI from 'vscode-uri';
import * as fs from 'fs';
import { TextDocument, CompletionList, Position } from 'vscode-languageserver-types'; 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 { getLanguageModelCache } from './languageModelCache';
import { getPathCompletionParticipant } from './pathCompletion'; import { getPathCompletionParticipant } from './pathCompletion';
import { formatError, runSafe } from './utils/runner'; import { formatError, runSafe } from './utils/runner';
import { getDocumentContext } from './utils/documentContext'; import { getDocumentContext } from './utils/documentContext';
import { parseCSSData } from './utils/languageFacts'; import { getDataProviders } from './customData';
export interface Settings { export interface Settings {
css: LanguageSettings; css: LanguageSettings;
@@ -66,17 +65,7 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
} }
const dataPaths: string[] = params.initializationOptions.dataPaths; const dataPaths: string[] = params.initializationOptions.dataPaths;
const customDataProviders = getDataProviders(dataPaths);
const customDataCollections: CSSData[] = [];
dataPaths.forEach(p => {
if (fs.existsSync(p)) {
const data = parseCSSData(fs.readFileSync(p, 'utf-8'));
customDataCollections.push(data);
} else {
return;
}
});
function getClientCapability<T>(name: string, def: T) { function getClientCapability<T>(name: string, def: T) {
const keys = name.split('.'); const keys = name.split('.');
@@ -93,9 +82,9 @@ connection.onInitialize((params: InitializeParams): InitializeResult => {
scopedSettingsSupport = !!getClientCapability('workspace.configuration', false); scopedSettingsSupport = !!getClientCapability('workspace.configuration', false);
foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE); foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
languageServices.css = getCSSLanguageService({ customDataCollections }); languageServices.css = getCSSLanguageService({ customDataProviders });
languageServices.scss = getSCSSLanguageService({ customDataCollections }); languageServices.scss = getSCSSLanguageService({ customDataProviders });
languageServices.less = getLESSLanguageService({ customDataCollections }); languageServices.less = getLESSLanguageService({ customDataProviders });
const capabilities: ServerCapabilities = { const capabilities: ServerCapabilities = {
// Tell the client that the server works in FULL text document sync mode // Tell the client that the server works in FULL text document sync mode

View File

@@ -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 || []
};
}

View File

@@ -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 || []
};
}

View File

@@ -229,10 +229,10 @@ supports-color@5.4.0:
dependencies: dependencies:
has-flag "^3.0.0" has-flag "^3.0.0"
vscode-css-languageservice@^3.0.13-next.7: vscode-css-languageservice@^3.0.13-next.8:
version "3.0.13-next.7" version "3.0.13-next.8"
resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13-next.7.tgz#48392edbf35ce60c54aeaf8d3e83c994d6c4c84e" resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.13-next.8.tgz#3e019c9166914fcbd8b71530ff32b438698206fa"
integrity sha512-2Z28n0CVwwNpdDmoIbjUMJPnchm+eRJE/PhhjXss/p0CnSJfXzbll3Ay1V+nDLW2NIGap0CJFbbfT+cilyivIA== integrity sha512-YjoIMCvZSegs7UOogehQjrfNybBL3MDVN2jx/uxFFw0VKFGAiyZkjfQiipEg36jbKL4LKHiBUoutoHYMF2PGfw==
dependencies: dependencies:
vscode-languageserver-types "^3.13.0" vscode-languageserver-types "^3.13.0"
vscode-nls "^4.0.0" vscode-nls "^4.0.0"