| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { Uri, Range, editor, languages, MarkerSeverity } from './fillers/monaco-editor-core.js';
- import * as jsonService from './_deps/vscode-json-languageservice/jsonLanguageService.js';
- // --- diagnostics --- ---
- var DiagnosticsAdapter = /** @class */ (function () {
- function DiagnosticsAdapter(_languageId, _worker, defaults) {
- var _this = this;
- this._languageId = _languageId;
- this._worker = _worker;
- this._disposables = [];
- this._listener = Object.create(null);
- var onModelAdd = function (model) {
- var modeId = model.getModeId();
- if (modeId !== _this._languageId) {
- return;
- }
- var handle;
- _this._listener[model.uri.toString()] = model.onDidChangeContent(function () {
- clearTimeout(handle);
- handle = setTimeout(function () { return _this._doValidate(model.uri, modeId); }, 500);
- });
- _this._doValidate(model.uri, modeId);
- };
- var onModelRemoved = function (model) {
- editor.setModelMarkers(model, _this._languageId, []);
- var uriStr = model.uri.toString();
- var listener = _this._listener[uriStr];
- if (listener) {
- listener.dispose();
- delete _this._listener[uriStr];
- }
- };
- this._disposables.push(editor.onDidCreateModel(onModelAdd));
- this._disposables.push(editor.onWillDisposeModel(function (model) {
- onModelRemoved(model);
- _this._resetSchema(model.uri);
- }));
- this._disposables.push(editor.onDidChangeModelLanguage(function (event) {
- onModelRemoved(event.model);
- onModelAdd(event.model);
- _this._resetSchema(event.model.uri);
- }));
- this._disposables.push(defaults.onDidChange(function (_) {
- editor.getModels().forEach(function (model) {
- if (model.getModeId() === _this._languageId) {
- onModelRemoved(model);
- onModelAdd(model);
- }
- });
- }));
- this._disposables.push({
- dispose: function () {
- editor.getModels().forEach(onModelRemoved);
- for (var key in _this._listener) {
- _this._listener[key].dispose();
- }
- }
- });
- editor.getModels().forEach(onModelAdd);
- }
- DiagnosticsAdapter.prototype.dispose = function () {
- this._disposables.forEach(function (d) { return d && d.dispose(); });
- this._disposables = [];
- };
- DiagnosticsAdapter.prototype._resetSchema = function (resource) {
- this._worker().then(function (worker) {
- worker.resetSchema(resource.toString());
- });
- };
- DiagnosticsAdapter.prototype._doValidate = function (resource, languageId) {
- this._worker(resource)
- .then(function (worker) {
- return worker.doValidation(resource.toString()).then(function (diagnostics) {
- var markers = diagnostics.map(function (d) { return toDiagnostics(resource, d); });
- var model = editor.getModel(resource);
- if (model && model.getModeId() === languageId) {
- editor.setModelMarkers(model, languageId, markers);
- }
- });
- })
- .then(undefined, function (err) {
- console.error(err);
- });
- };
- return DiagnosticsAdapter;
- }());
- export { DiagnosticsAdapter };
- function toSeverity(lsSeverity) {
- switch (lsSeverity) {
- case jsonService.DiagnosticSeverity.Error:
- return MarkerSeverity.Error;
- case jsonService.DiagnosticSeverity.Warning:
- return MarkerSeverity.Warning;
- case jsonService.DiagnosticSeverity.Information:
- return MarkerSeverity.Info;
- case jsonService.DiagnosticSeverity.Hint:
- return MarkerSeverity.Hint;
- default:
- return MarkerSeverity.Info;
- }
- }
- function toDiagnostics(resource, diag) {
- var code = typeof diag.code === 'number' ? String(diag.code) : diag.code;
- return {
- severity: toSeverity(diag.severity),
- startLineNumber: diag.range.start.line + 1,
- startColumn: diag.range.start.character + 1,
- endLineNumber: diag.range.end.line + 1,
- endColumn: diag.range.end.character + 1,
- message: diag.message,
- code: code,
- source: diag.source
- };
- }
- // --- completion ------
- function fromPosition(position) {
- if (!position) {
- return void 0;
- }
- return { character: position.column - 1, line: position.lineNumber - 1 };
- }
- function fromRange(range) {
- if (!range) {
- return void 0;
- }
- return {
- start: {
- line: range.startLineNumber - 1,
- character: range.startColumn - 1
- },
- end: { line: range.endLineNumber - 1, character: range.endColumn - 1 }
- };
- }
- function toRange(range) {
- if (!range) {
- return void 0;
- }
- return new Range(range.start.line + 1, range.start.character + 1, range.end.line + 1, range.end.character + 1);
- }
- function isInsertReplaceEdit(edit) {
- return (typeof edit.insert !== 'undefined' &&
- typeof edit.replace !== 'undefined');
- }
- function toCompletionItemKind(kind) {
- var mItemKind = languages.CompletionItemKind;
- switch (kind) {
- case jsonService.CompletionItemKind.Text:
- return mItemKind.Text;
- case jsonService.CompletionItemKind.Method:
- return mItemKind.Method;
- case jsonService.CompletionItemKind.Function:
- return mItemKind.Function;
- case jsonService.CompletionItemKind.Constructor:
- return mItemKind.Constructor;
- case jsonService.CompletionItemKind.Field:
- return mItemKind.Field;
- case jsonService.CompletionItemKind.Variable:
- return mItemKind.Variable;
- case jsonService.CompletionItemKind.Class:
- return mItemKind.Class;
- case jsonService.CompletionItemKind.Interface:
- return mItemKind.Interface;
- case jsonService.CompletionItemKind.Module:
- return mItemKind.Module;
- case jsonService.CompletionItemKind.Property:
- return mItemKind.Property;
- case jsonService.CompletionItemKind.Unit:
- return mItemKind.Unit;
- case jsonService.CompletionItemKind.Value:
- return mItemKind.Value;
- case jsonService.CompletionItemKind.Enum:
- return mItemKind.Enum;
- case jsonService.CompletionItemKind.Keyword:
- return mItemKind.Keyword;
- case jsonService.CompletionItemKind.Snippet:
- return mItemKind.Snippet;
- case jsonService.CompletionItemKind.Color:
- return mItemKind.Color;
- case jsonService.CompletionItemKind.File:
- return mItemKind.File;
- case jsonService.CompletionItemKind.Reference:
- return mItemKind.Reference;
- }
- return mItemKind.Property;
- }
- function fromCompletionItemKind(kind) {
- var mItemKind = languages.CompletionItemKind;
- switch (kind) {
- case mItemKind.Text:
- return jsonService.CompletionItemKind.Text;
- case mItemKind.Method:
- return jsonService.CompletionItemKind.Method;
- case mItemKind.Function:
- return jsonService.CompletionItemKind.Function;
- case mItemKind.Constructor:
- return jsonService.CompletionItemKind.Constructor;
- case mItemKind.Field:
- return jsonService.CompletionItemKind.Field;
- case mItemKind.Variable:
- return jsonService.CompletionItemKind.Variable;
- case mItemKind.Class:
- return jsonService.CompletionItemKind.Class;
- case mItemKind.Interface:
- return jsonService.CompletionItemKind.Interface;
- case mItemKind.Module:
- return jsonService.CompletionItemKind.Module;
- case mItemKind.Property:
- return jsonService.CompletionItemKind.Property;
- case mItemKind.Unit:
- return jsonService.CompletionItemKind.Unit;
- case mItemKind.Value:
- return jsonService.CompletionItemKind.Value;
- case mItemKind.Enum:
- return jsonService.CompletionItemKind.Enum;
- case mItemKind.Keyword:
- return jsonService.CompletionItemKind.Keyword;
- case mItemKind.Snippet:
- return jsonService.CompletionItemKind.Snippet;
- case mItemKind.Color:
- return jsonService.CompletionItemKind.Color;
- case mItemKind.File:
- return jsonService.CompletionItemKind.File;
- case mItemKind.Reference:
- return jsonService.CompletionItemKind.Reference;
- }
- return jsonService.CompletionItemKind.Property;
- }
- function toTextEdit(textEdit) {
- if (!textEdit) {
- return void 0;
- }
- return {
- range: toRange(textEdit.range),
- text: textEdit.newText
- };
- }
- function toCommand(c) {
- return c && c.command === 'editor.action.triggerSuggest' ? { id: c.command, title: c.title, arguments: c.arguments } : undefined;
- }
- var CompletionAdapter = /** @class */ (function () {
- function CompletionAdapter(_worker) {
- this._worker = _worker;
- }
- Object.defineProperty(CompletionAdapter.prototype, "triggerCharacters", {
- get: function () {
- return [' ', ':', '"'];
- },
- enumerable: false,
- configurable: true
- });
- CompletionAdapter.prototype.provideCompletionItems = function (model, position, context, token) {
- var resource = model.uri;
- return this._worker(resource)
- .then(function (worker) {
- return worker.doComplete(resource.toString(), fromPosition(position));
- })
- .then(function (info) {
- if (!info) {
- return;
- }
- var wordInfo = model.getWordUntilPosition(position);
- var wordRange = new Range(position.lineNumber, wordInfo.startColumn, position.lineNumber, wordInfo.endColumn);
- var items = info.items.map(function (entry) {
- var item = {
- label: entry.label,
- insertText: entry.insertText || entry.label,
- sortText: entry.sortText,
- filterText: entry.filterText,
- documentation: entry.documentation,
- detail: entry.detail,
- command: toCommand(entry.command),
- range: wordRange,
- kind: toCompletionItemKind(entry.kind)
- };
- if (entry.textEdit) {
- if (isInsertReplaceEdit(entry.textEdit)) {
- item.range = {
- insert: toRange(entry.textEdit.insert),
- replace: toRange(entry.textEdit.replace)
- };
- }
- else {
- item.range = toRange(entry.textEdit.range);
- }
- item.insertText = entry.textEdit.newText;
- }
- if (entry.additionalTextEdits) {
- item.additionalTextEdits = entry.additionalTextEdits.map(toTextEdit);
- }
- if (entry.insertTextFormat === jsonService.InsertTextFormat.Snippet) {
- item.insertTextRules = languages.CompletionItemInsertTextRule.InsertAsSnippet;
- }
- return item;
- });
- return {
- isIncomplete: info.isIncomplete,
- suggestions: items
- };
- });
- };
- return CompletionAdapter;
- }());
- export { CompletionAdapter };
- function isMarkupContent(thing) {
- return (thing &&
- typeof thing === 'object' &&
- typeof thing.kind === 'string');
- }
- function toMarkdownString(entry) {
- if (typeof entry === 'string') {
- return {
- value: entry
- };
- }
- if (isMarkupContent(entry)) {
- if (entry.kind === 'plaintext') {
- return {
- value: entry.value.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&')
- };
- }
- return {
- value: entry.value
- };
- }
- return { value: '```' + entry.language + '\n' + entry.value + '\n```\n' };
- }
- function toMarkedStringArray(contents) {
- if (!contents) {
- return void 0;
- }
- if (Array.isArray(contents)) {
- return contents.map(toMarkdownString);
- }
- return [toMarkdownString(contents)];
- }
- // --- hover ------
- var HoverAdapter = /** @class */ (function () {
- function HoverAdapter(_worker) {
- this._worker = _worker;
- }
- HoverAdapter.prototype.provideHover = function (model, position, token) {
- var resource = model.uri;
- return this._worker(resource)
- .then(function (worker) {
- return worker.doHover(resource.toString(), fromPosition(position));
- })
- .then(function (info) {
- if (!info) {
- return;
- }
- return {
- range: toRange(info.range),
- contents: toMarkedStringArray(info.contents)
- };
- });
- };
- return HoverAdapter;
- }());
- export { HoverAdapter };
- // --- definition ------
- function toLocation(location) {
- return {
- uri: Uri.parse(location.uri),
- range: toRange(location.range)
- };
- }
- // --- document symbols ------
- function toSymbolKind(kind) {
- var mKind = languages.SymbolKind;
- switch (kind) {
- case jsonService.SymbolKind.File:
- return mKind.Array;
- case jsonService.SymbolKind.Module:
- return mKind.Module;
- case jsonService.SymbolKind.Namespace:
- return mKind.Namespace;
- case jsonService.SymbolKind.Package:
- return mKind.Package;
- case jsonService.SymbolKind.Class:
- return mKind.Class;
- case jsonService.SymbolKind.Method:
- return mKind.Method;
- case jsonService.SymbolKind.Property:
- return mKind.Property;
- case jsonService.SymbolKind.Field:
- return mKind.Field;
- case jsonService.SymbolKind.Constructor:
- return mKind.Constructor;
- case jsonService.SymbolKind.Enum:
- return mKind.Enum;
- case jsonService.SymbolKind.Interface:
- return mKind.Interface;
- case jsonService.SymbolKind.Function:
- return mKind.Function;
- case jsonService.SymbolKind.Variable:
- return mKind.Variable;
- case jsonService.SymbolKind.Constant:
- return mKind.Constant;
- case jsonService.SymbolKind.String:
- return mKind.String;
- case jsonService.SymbolKind.Number:
- return mKind.Number;
- case jsonService.SymbolKind.Boolean:
- return mKind.Boolean;
- case jsonService.SymbolKind.Array:
- return mKind.Array;
- }
- return mKind.Function;
- }
- var DocumentSymbolAdapter = /** @class */ (function () {
- function DocumentSymbolAdapter(_worker) {
- this._worker = _worker;
- }
- DocumentSymbolAdapter.prototype.provideDocumentSymbols = function (model, token) {
- var resource = model.uri;
- return this._worker(resource)
- .then(function (worker) { return worker.findDocumentSymbols(resource.toString()); })
- .then(function (items) {
- if (!items) {
- return;
- }
- return items.map(function (item) { return ({
- name: item.name,
- detail: '',
- containerName: item.containerName,
- kind: toSymbolKind(item.kind),
- range: toRange(item.location.range),
- selectionRange: toRange(item.location.range),
- tags: []
- }); });
- });
- };
- return DocumentSymbolAdapter;
- }());
- export { DocumentSymbolAdapter };
- function fromFormattingOptions(options) {
- return {
- tabSize: options.tabSize,
- insertSpaces: options.insertSpaces
- };
- }
- var DocumentFormattingEditProvider = /** @class */ (function () {
- function DocumentFormattingEditProvider(_worker) {
- this._worker = _worker;
- }
- DocumentFormattingEditProvider.prototype.provideDocumentFormattingEdits = function (model, options, token) {
- var resource = model.uri;
- return this._worker(resource).then(function (worker) {
- return worker
- .format(resource.toString(), null, fromFormattingOptions(options))
- .then(function (edits) {
- if (!edits || edits.length === 0) {
- return;
- }
- return edits.map(toTextEdit);
- });
- });
- };
- return DocumentFormattingEditProvider;
- }());
- export { DocumentFormattingEditProvider };
- var DocumentRangeFormattingEditProvider = /** @class */ (function () {
- function DocumentRangeFormattingEditProvider(_worker) {
- this._worker = _worker;
- }
- DocumentRangeFormattingEditProvider.prototype.provideDocumentRangeFormattingEdits = function (model, range, options, token) {
- var resource = model.uri;
- return this._worker(resource).then(function (worker) {
- return worker
- .format(resource.toString(), fromRange(range), fromFormattingOptions(options))
- .then(function (edits) {
- if (!edits || edits.length === 0) {
- return;
- }
- return edits.map(toTextEdit);
- });
- });
- };
- return DocumentRangeFormattingEditProvider;
- }());
- export { DocumentRangeFormattingEditProvider };
- var DocumentColorAdapter = /** @class */ (function () {
- function DocumentColorAdapter(_worker) {
- this._worker = _worker;
- }
- DocumentColorAdapter.prototype.provideDocumentColors = function (model, token) {
- var resource = model.uri;
- return this._worker(resource)
- .then(function (worker) { return worker.findDocumentColors(resource.toString()); })
- .then(function (infos) {
- if (!infos) {
- return;
- }
- return infos.map(function (item) { return ({
- color: item.color,
- range: toRange(item.range)
- }); });
- });
- };
- DocumentColorAdapter.prototype.provideColorPresentations = function (model, info, token) {
- var resource = model.uri;
- return this._worker(resource)
- .then(function (worker) {
- return worker.getColorPresentations(resource.toString(), info.color, fromRange(info.range));
- })
- .then(function (presentations) {
- if (!presentations) {
- return;
- }
- return presentations.map(function (presentation) {
- var item = {
- label: presentation.label
- };
- if (presentation.textEdit) {
- item.textEdit = toTextEdit(presentation.textEdit);
- }
- if (presentation.additionalTextEdits) {
- item.additionalTextEdits = presentation.additionalTextEdits.map(toTextEdit);
- }
- return item;
- });
- });
- };
- return DocumentColorAdapter;
- }());
- export { DocumentColorAdapter };
- var FoldingRangeAdapter = /** @class */ (function () {
- function FoldingRangeAdapter(_worker) {
- this._worker = _worker;
- }
- FoldingRangeAdapter.prototype.provideFoldingRanges = function (model, context, token) {
- var resource = model.uri;
- return this._worker(resource)
- .then(function (worker) { return worker.getFoldingRanges(resource.toString(), context); })
- .then(function (ranges) {
- if (!ranges) {
- return;
- }
- return ranges.map(function (range) {
- var result = {
- start: range.startLine + 1,
- end: range.endLine + 1
- };
- if (typeof range.kind !== 'undefined') {
- result.kind = toFoldingRangeKind(range.kind);
- }
- return result;
- });
- });
- };
- return FoldingRangeAdapter;
- }());
- export { FoldingRangeAdapter };
- function toFoldingRangeKind(kind) {
- switch (kind) {
- case jsonService.FoldingRangeKind.Comment:
- return languages.FoldingRangeKind.Comment;
- case jsonService.FoldingRangeKind.Imports:
- return languages.FoldingRangeKind.Imports;
- case jsonService.FoldingRangeKind.Region:
- return languages.FoldingRangeKind.Region;
- }
- return void 0;
- }
- var SelectionRangeAdapter = /** @class */ (function () {
- function SelectionRangeAdapter(_worker) {
- this._worker = _worker;
- }
- SelectionRangeAdapter.prototype.provideSelectionRanges = function (model, positions, token) {
- var resource = model.uri;
- return this._worker(resource)
- .then(function (worker) { return worker.getSelectionRanges(resource.toString(), positions.map(fromPosition)); })
- .then(function (selectionRanges) {
- if (!selectionRanges) {
- return;
- }
- return selectionRanges.map(function (selectionRange) {
- var result = [];
- while (selectionRange) {
- result.push({ range: toRange(selectionRange.range) });
- selectionRange = selectionRange.parent;
- }
- return result;
- });
- });
- };
- return SelectionRangeAdapter;
- }());
- export { SelectionRangeAdapter };
|