mirror of
https://github.com/danbulant/monaco-yaml
synced 2026-05-24 12:21:53 +00:00
Implement definition provider
This commit is contained in:
parent
edf8623b78
commit
786cdb5dbb
5 changed files with 38 additions and 0 deletions
|
|
@ -16,6 +16,7 @@ files:
|
||||||
- Document Symbols
|
- Document Symbols
|
||||||
- Automatically load remote schema files (by enabling DiagnosticsOptions.enableSchemaRequest)
|
- Automatically load remote schema files (by enabling DiagnosticsOptions.enableSchemaRequest)
|
||||||
- Links from JSON references.
|
- Links from JSON references.
|
||||||
|
- Links and hover effects from YAML anchors.
|
||||||
|
|
||||||
Schemas can also be provided by configuration. See
|
Schemas can also be provided by configuration. See
|
||||||
[here](https://github.com/remcohaszing/monaco-yaml/blob/main/index.d.ts) for the API that the plugin
|
[here](https://github.com/remcohaszing/monaco-yaml/blob/main/index.d.ts) for the API that the plugin
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,14 @@ pointer:
|
||||||
$ref: '#/array'
|
$ref: '#/array'
|
||||||
|
|
||||||
|
|
||||||
|
# This anchor can be referenced
|
||||||
|
anchorRef: &anchor can be clicked as well
|
||||||
|
|
||||||
|
|
||||||
|
# Press control while hovering over the anchor
|
||||||
|
anchorPointer: *anchor
|
||||||
|
|
||||||
|
|
||||||
formatting: Formatting is supported too! Under the hood this is powered by Prettier. Just press Ctrl+Shift+I or right click and press Format to format this document.
|
formatting: Formatting is supported too! Under the hood this is powered by Prettier. Just press Ctrl+Shift+I or right click and press Format to format this document.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -252,6 +252,26 @@ export function createCompletionItemProvider(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- definition ------
|
||||||
|
|
||||||
|
export function createDefinitionProvider(getWorker: WorkerAccessor): languages.DefinitionProvider {
|
||||||
|
return {
|
||||||
|
async provideDefinition(model, position) {
|
||||||
|
const resource = model.uri;
|
||||||
|
|
||||||
|
const worker = await getWorker(resource);
|
||||||
|
const definitions = await worker.doDefinition(String(resource), fromPosition(position));
|
||||||
|
|
||||||
|
return definitions?.map((definition) => ({
|
||||||
|
originSelectionRange: definition.originSelectionRange,
|
||||||
|
range: toRange(definition.targetRange),
|
||||||
|
targetSelectionRange: definition.targetSelectionRange,
|
||||||
|
uri: Uri.parse(definition.targetUri),
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// --- hover ------
|
// --- hover ------
|
||||||
|
|
||||||
export function createHoverProvider(getWorker: WorkerAccessor): languages.HoverProvider {
|
export function createHoverProvider(getWorker: WorkerAccessor): languages.HoverProvider {
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import { languages } from 'monaco-editor/esm/vs/editor/editor.api';
|
||||||
import { languageId } from './constants';
|
import { languageId } from './constants';
|
||||||
import {
|
import {
|
||||||
createCompletionItemProvider,
|
createCompletionItemProvider,
|
||||||
|
createDefinitionProvider,
|
||||||
createDiagnosticsAdapter,
|
createDiagnosticsAdapter,
|
||||||
createDocumentFormattingEditProvider,
|
createDocumentFormattingEditProvider,
|
||||||
createDocumentSymbolProvider,
|
createDocumentSymbolProvider,
|
||||||
|
|
@ -48,6 +49,7 @@ export function setupMode(defaults: languages.yaml.LanguageServiceDefaults): voi
|
||||||
|
|
||||||
languages.registerCompletionItemProvider(languageId, createCompletionItemProvider(worker));
|
languages.registerCompletionItemProvider(languageId, createCompletionItemProvider(worker));
|
||||||
languages.registerHoverProvider(languageId, createHoverProvider(worker));
|
languages.registerHoverProvider(languageId, createHoverProvider(worker));
|
||||||
|
languages.registerDefinitionProvider(languageId, createDefinitionProvider(worker));
|
||||||
languages.registerDocumentSymbolProvider(languageId, createDocumentSymbolProvider(worker));
|
languages.registerDocumentSymbolProvider(languageId, createDocumentSymbolProvider(worker));
|
||||||
languages.registerDocumentFormattingEditProvider(
|
languages.registerDocumentFormattingEditProvider(
|
||||||
languageId,
|
languageId,
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ export interface YAMLWorker {
|
||||||
|
|
||||||
doComplete: (uri: string, position: ls.Position) => Promisable<ls.CompletionList>;
|
doComplete: (uri: string, position: ls.Position) => Promisable<ls.CompletionList>;
|
||||||
|
|
||||||
|
doDefinition: (uri: string, position: ls.Position) => Promisable<ls.LocationLink[]>;
|
||||||
|
|
||||||
doHover: (uri: string, position: ls.Position) => Promisable<ls.Hover>;
|
doHover: (uri: string, position: ls.Position) => Promisable<ls.Hover>;
|
||||||
|
|
||||||
format: (uri: string, options: CustomFormatterOptions) => Promisable<ls.TextEdit[]>;
|
format: (uri: string, options: CustomFormatterOptions) => Promisable<ls.TextEdit[]>;
|
||||||
|
|
@ -64,6 +66,11 @@ export function createYAMLWorker(
|
||||||
return languageService.doComplete(document, position, languageSettings.isKubernetes);
|
return languageService.doComplete(document, position, languageSettings.isKubernetes);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
doDefinition(uri, position) {
|
||||||
|
const document = getTextDocument(uri);
|
||||||
|
return languageService.doDefinition(document, { position, textDocument: { uri } });
|
||||||
|
},
|
||||||
|
|
||||||
doHover(uri, position) {
|
doHover(uri, position) {
|
||||||
const document = getTextDocument(uri);
|
const document = getTextDocument(uri);
|
||||||
return languageService.doHover(document, position);
|
return languageService.doHover(document, position);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue