mirror of
https://github.com/microsoft/vscode.git
synced 2025-12-24 12:19:20 +00:00
Adopt new css provider interface
This commit is contained in:
5
extensions/css-language-features/.vscode/settings.json
vendored
Normal file
5
extensions/css-language-features/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"prettier.semi": true,
|
||||||
|
"prettier.singleQuote": true,
|
||||||
|
"prettier.printWidth": 120,
|
||||||
|
}
|
||||||
@@ -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": {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
47
extensions/css-language-features/server/src/customData.ts
Normal file
47
extensions/css-language-features/server/src/customData.ts
Normal 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 || []
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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 || []
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user