mirror of
https://github.com/danbulant/monaco-yaml
synced 2026-05-19 04:08:48 +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
|
||||
- Automatically load remote schema files (by enabling DiagnosticsOptions.enableSchemaRequest)
|
||||
- Links from JSON references.
|
||||
- Links and hover effects from YAML anchors.
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -95,6 +95,14 @@ pointer:
|
|||
$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.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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 ------
|
||||
|
||||
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 {
|
||||
createCompletionItemProvider,
|
||||
createDefinitionProvider,
|
||||
createDiagnosticsAdapter,
|
||||
createDocumentFormattingEditProvider,
|
||||
createDocumentSymbolProvider,
|
||||
|
|
@ -48,6 +49,7 @@ export function setupMode(defaults: languages.yaml.LanguageServiceDefaults): voi
|
|||
|
||||
languages.registerCompletionItemProvider(languageId, createCompletionItemProvider(worker));
|
||||
languages.registerHoverProvider(languageId, createHoverProvider(worker));
|
||||
languages.registerDefinitionProvider(languageId, createDefinitionProvider(worker));
|
||||
languages.registerDocumentSymbolProvider(languageId, createDocumentSymbolProvider(worker));
|
||||
languages.registerDocumentFormattingEditProvider(
|
||||
languageId,
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ export interface YAMLWorker {
|
|||
|
||||
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>;
|
||||
|
||||
format: (uri: string, options: CustomFormatterOptions) => Promisable<ls.TextEdit[]>;
|
||||
|
|
@ -64,6 +66,11 @@ export function createYAMLWorker(
|
|||
return languageService.doComplete(document, position, languageSettings.isKubernetes);
|
||||
},
|
||||
|
||||
doDefinition(uri, position) {
|
||||
const document = getTextDocument(uri);
|
||||
return languageService.doDefinition(document, { position, textDocument: { uri } });
|
||||
},
|
||||
|
||||
doHover(uri, position) {
|
||||
const document = getTextDocument(uri);
|
||||
return languageService.doHover(document, position);
|
||||
|
|
|
|||
Loading…
Reference in a new issue