66 lines
4.0 KiB
JavaScript
66 lines
4.0 KiB
JavaScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
import { JSONCompletion } from './services/jsonCompletion';
|
|
import { JSONHover } from './services/jsonHover';
|
|
import { JSONValidation } from './services/jsonValidation';
|
|
import { JSONDocumentSymbols } from './services/jsonDocumentSymbols';
|
|
import { parse as parseJSON, newJSONDocument } from './parser/jsonParser';
|
|
import { schemaContributions } from './services/configuration';
|
|
import { JSONSchemaService } from './services/jsonSchemaService';
|
|
import { getFoldingRanges } from './services/jsonFolding';
|
|
import { getSelectionRanges } from './services/jsonSelectionRanges';
|
|
import { format as formatJSON } from 'jsonc-parser';
|
|
import { Range, TextEdit } from './jsonLanguageTypes';
|
|
import { findLinks } from './services/jsonLinks';
|
|
export * from './jsonLanguageTypes';
|
|
export function getLanguageService(params) {
|
|
var promise = params.promiseConstructor || Promise;
|
|
var jsonSchemaService = new JSONSchemaService(params.schemaRequestService, params.workspaceContext, promise);
|
|
jsonSchemaService.setSchemaContributions(schemaContributions);
|
|
var jsonCompletion = new JSONCompletion(jsonSchemaService, params.contributions, promise, params.clientCapabilities);
|
|
var jsonHover = new JSONHover(jsonSchemaService, params.contributions, promise);
|
|
var jsonDocumentSymbols = new JSONDocumentSymbols(jsonSchemaService);
|
|
var jsonValidation = new JSONValidation(jsonSchemaService, promise);
|
|
return {
|
|
configure: function (settings) {
|
|
jsonSchemaService.clearExternalSchemas();
|
|
if (settings.schemas) {
|
|
settings.schemas.forEach(function (settings) {
|
|
jsonSchemaService.registerExternalSchema(settings.uri, settings.fileMatch, settings.schema);
|
|
});
|
|
}
|
|
jsonValidation.configure(settings);
|
|
},
|
|
resetSchema: function (uri) { return jsonSchemaService.onResourceChange(uri); },
|
|
doValidation: jsonValidation.doValidation.bind(jsonValidation),
|
|
parseJSONDocument: function (document) { return parseJSON(document, { collectComments: true }); },
|
|
newJSONDocument: function (root, diagnostics) { return newJSONDocument(root, diagnostics); },
|
|
getMatchingSchemas: jsonSchemaService.getMatchingSchemas.bind(jsonSchemaService),
|
|
doResolve: jsonCompletion.doResolve.bind(jsonCompletion),
|
|
doComplete: jsonCompletion.doComplete.bind(jsonCompletion),
|
|
findDocumentSymbols: jsonDocumentSymbols.findDocumentSymbols.bind(jsonDocumentSymbols),
|
|
findDocumentSymbols2: jsonDocumentSymbols.findDocumentSymbols2.bind(jsonDocumentSymbols),
|
|
findDocumentColors: jsonDocumentSymbols.findDocumentColors.bind(jsonDocumentSymbols),
|
|
getColorPresentations: jsonDocumentSymbols.getColorPresentations.bind(jsonDocumentSymbols),
|
|
doHover: jsonHover.doHover.bind(jsonHover),
|
|
getFoldingRanges: getFoldingRanges,
|
|
getSelectionRanges: getSelectionRanges,
|
|
findDefinition: function () { return Promise.resolve([]); },
|
|
findLinks: findLinks,
|
|
format: function (d, r, o) {
|
|
var range = undefined;
|
|
if (r) {
|
|
var offset = d.offsetAt(r.start);
|
|
var length = d.offsetAt(r.end) - offset;
|
|
range = { offset: offset, length: length };
|
|
}
|
|
var options = { tabSize: o ? o.tabSize : 4, insertSpaces: (o === null || o === void 0 ? void 0 : o.insertSpaces) === true, insertFinalNewline: (o === null || o === void 0 ? void 0 : o.insertFinalNewline) === true, eol: '\n' };
|
|
return formatJSON(d.getText(), range, options).map(function (e) {
|
|
return TextEdit.replace(Range.create(d.positionAt(e.offset), d.positionAt(e.offset + e.length)), e.content);
|
|
});
|
|
}
|
|
};
|
|
}
|