mirror of
https://github.com/Microsoft/vscode
synced 2024-09-18 01:58:27 +00:00
[json] update service (fixes #58956)
This commit is contained in:
parent
5037516238
commit
1b38a64602
|
@ -14,7 +14,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"jsonc-parser": "^2.0.2",
|
"jsonc-parser": "^2.0.2",
|
||||||
"request-light": "^0.2.4",
|
"request-light": "^0.2.4",
|
||||||
"vscode-json-languageservice": "^3.1.7",
|
"vscode-json-languageservice": "^3.2.0-next.2",
|
||||||
"vscode-languageserver": "^5.1.0",
|
"vscode-languageserver": "^5.1.0",
|
||||||
"vscode-nls": "^4.0.0",
|
"vscode-nls": "^4.0.0",
|
||||||
"vscode-uri": "^1.0.6"
|
"vscode-uri": "^1.0.6"
|
||||||
|
|
|
@ -49,52 +49,6 @@ process.on('uncaughtException', (e: any) => {
|
||||||
console.log = connection.console.log.bind(connection.console);
|
console.log = connection.console.log.bind(connection.console);
|
||||||
console.error = connection.console.error.bind(connection.console);
|
console.error = connection.console.error.bind(connection.console);
|
||||||
|
|
||||||
// Create a simple text document manager. The text document manager
|
|
||||||
// supports full document sync only
|
|
||||||
const documents: TextDocuments = new TextDocuments();
|
|
||||||
// Make the text document manager listen on the connection
|
|
||||||
// for open, change and close text document events
|
|
||||||
documents.listen(connection);
|
|
||||||
|
|
||||||
let clientSnippetSupport = false;
|
|
||||||
let clientDynamicRegisterSupport = false;
|
|
||||||
let foldingRangeLimit = Number.MAX_VALUE;
|
|
||||||
let hierarchicalDocumentSymbolSupport = false;
|
|
||||||
|
|
||||||
// After the server has started the client sends an initialize request. The server receives
|
|
||||||
// in the passed params the rootPath of the workspace plus the client capabilities.
|
|
||||||
connection.onInitialize((params: InitializeParams): InitializeResult => {
|
|
||||||
|
|
||||||
function getClientCapability<T>(name: string, def: T) {
|
|
||||||
const keys = name.split('.');
|
|
||||||
let c: any = params.capabilities;
|
|
||||||
for (let i = 0; c && i < keys.length; i++) {
|
|
||||||
if (!c.hasOwnProperty(keys[i])) {
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
c = c[keys[i]];
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
clientSnippetSupport = getClientCapability('textDocument.completion.completionItem.snippetSupport', false);
|
|
||||||
clientDynamicRegisterSupport = getClientCapability('workspace.symbol.dynamicRegistration', false);
|
|
||||||
foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
|
|
||||||
hierarchicalDocumentSymbolSupport = getClientCapability('textDocument.documentSymbol.hierarchicalDocumentSymbolSupport', false);
|
|
||||||
const capabilities: ServerCapabilities = {
|
|
||||||
// Tell the client that the server works in FULL text document sync mode
|
|
||||||
textDocumentSync: documents.syncKind,
|
|
||||||
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['"', ':'] } : void 0,
|
|
||||||
hoverProvider: true,
|
|
||||||
documentSymbolProvider: true,
|
|
||||||
documentRangeFormattingProvider: false,
|
|
||||||
colorProvider: {},
|
|
||||||
foldingRangeProvider: true
|
|
||||||
};
|
|
||||||
|
|
||||||
return { capabilities };
|
|
||||||
});
|
|
||||||
|
|
||||||
const workspaceContext = {
|
const workspaceContext = {
|
||||||
resolveRelativePath: (relativePath: string, resource: string) => {
|
resolveRelativePath: (relativePath: string, resource: string) => {
|
||||||
return URL.resolve(resource, relativePath);
|
return URL.resolve(resource, relativePath);
|
||||||
|
@ -138,12 +92,67 @@ const schemaRequestService = (uri: string): Thenable<string> => {
|
||||||
};
|
};
|
||||||
|
|
||||||
// create the JSON language service
|
// create the JSON language service
|
||||||
const languageService = getLanguageService({
|
let languageService = getLanguageService({
|
||||||
schemaRequestService,
|
schemaRequestService,
|
||||||
workspaceContext,
|
workspaceContext,
|
||||||
contributions: []
|
contributions: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Create a simple text document manager. The text document manager
|
||||||
|
// supports full document sync only
|
||||||
|
const documents: TextDocuments = new TextDocuments();
|
||||||
|
// Make the text document manager listen on the connection
|
||||||
|
// for open, change and close text document events
|
||||||
|
documents.listen(connection);
|
||||||
|
|
||||||
|
let clientSnippetSupport = false;
|
||||||
|
let clientDynamicRegisterSupport = false;
|
||||||
|
let foldingRangeLimit = Number.MAX_VALUE;
|
||||||
|
let hierarchicalDocumentSymbolSupport = false;
|
||||||
|
|
||||||
|
// After the server has started the client sends an initialize request. The server receives
|
||||||
|
// in the passed params the rootPath of the workspace plus the client capabilities.
|
||||||
|
connection.onInitialize((params: InitializeParams): InitializeResult => {
|
||||||
|
|
||||||
|
languageService = getLanguageService({
|
||||||
|
schemaRequestService,
|
||||||
|
workspaceContext,
|
||||||
|
contributions: [],
|
||||||
|
clientCapabilities: params.capabilities
|
||||||
|
});
|
||||||
|
|
||||||
|
function getClientCapability<T>(name: string, def: T) {
|
||||||
|
const keys = name.split('.');
|
||||||
|
let c: any = params.capabilities;
|
||||||
|
for (let i = 0; c && i < keys.length; i++) {
|
||||||
|
if (!c.hasOwnProperty(keys[i])) {
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
c = c[keys[i]];
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
clientSnippetSupport = getClientCapability('textDocument.completion.completionItem.snippetSupport', false);
|
||||||
|
clientDynamicRegisterSupport = getClientCapability('workspace.symbol.dynamicRegistration', false);
|
||||||
|
foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
|
||||||
|
hierarchicalDocumentSymbolSupport = getClientCapability('textDocument.documentSymbol.hierarchicalDocumentSymbolSupport', false);
|
||||||
|
const capabilities: ServerCapabilities = {
|
||||||
|
// Tell the client that the server works in FULL text document sync mode
|
||||||
|
textDocumentSync: documents.syncKind,
|
||||||
|
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['"', ':'] } : void 0,
|
||||||
|
hoverProvider: true,
|
||||||
|
documentSymbolProvider: true,
|
||||||
|
documentRangeFormattingProvider: false,
|
||||||
|
colorProvider: {},
|
||||||
|
foldingRangeProvider: true
|
||||||
|
};
|
||||||
|
|
||||||
|
return { capabilities };
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// The settings interface describes the server relevant settings part
|
// The settings interface describes the server relevant settings part
|
||||||
interface Settings {
|
interface Settings {
|
||||||
json: {
|
json: {
|
||||||
|
|
|
@ -62,9 +62,9 @@ request-light@^0.2.4:
|
||||||
https-proxy-agent "^2.2.1"
|
https-proxy-agent "^2.2.1"
|
||||||
vscode-nls "^4.0.0"
|
vscode-nls "^4.0.0"
|
||||||
|
|
||||||
vscode-json-languageservice@^3.1.7:
|
vscode-json-languageservice@^3.2.0-next.2:
|
||||||
version "3.1.7"
|
version "3.2.0-next.2"
|
||||||
resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.1.7.tgz#ace6ef40c340262b2a6fcd7f72be99c99751010c"
|
resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.2.0-next.2.tgz#4f70bc960855f3055af093b59859a4de4672381a"
|
||||||
dependencies:
|
dependencies:
|
||||||
jsonc-parser "^2.0.2"
|
jsonc-parser "^2.0.2"
|
||||||
vscode-languageserver-types "^3.13.0"
|
vscode-languageserver-types "^3.13.0"
|
||||||
|
|
Loading…
Reference in a new issue