mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 18:32:56 +01:00
Add inlay hints support
This commit is contained in:
parent
dda62a58b7
commit
f40d79d54d
5 changed files with 88 additions and 2 deletions
6
monaco.d.ts
vendored
6
monaco.d.ts
vendored
|
|
@ -413,6 +413,12 @@ declare namespace monaco.languages.typescript {
|
||||||
errorCodes: number[],
|
errorCodes: number[],
|
||||||
formatOptions: any
|
formatOptions: any
|
||||||
): Promise<ReadonlyArray<any>>;
|
): Promise<ReadonlyArray<any>>;
|
||||||
|
/**
|
||||||
|
* Get inlay hints in the range of the file.
|
||||||
|
* @param fileName
|
||||||
|
* @returns `Promise<typescript.InlayHint[]>`
|
||||||
|
*/
|
||||||
|
provideInlayHints(fileName: string, start: number, end: number): Promise<ReadonlyArray<any>>;
|
||||||
}
|
}
|
||||||
export const typescriptVersion: string;
|
export const typescriptVersion: string;
|
||||||
export const typescriptDefaults: LanguageServiceDefaults;
|
export const typescriptDefaults: LanguageServiceDefaults;
|
||||||
|
|
|
||||||
|
|
@ -1221,3 +1221,49 @@ export class RenameAdapter extends Adapter implements languages.RenameProvider {
|
||||||
return { edits };
|
return { edits };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- inlay hints ----
|
||||||
|
|
||||||
|
export class InlayHintsAdapter extends Adapter implements languages.InlayHintsProvider {
|
||||||
|
public async provideInlayHints(
|
||||||
|
model: editor.ITextModel,
|
||||||
|
range: Range,
|
||||||
|
token: CancellationToken
|
||||||
|
): Promise<languages.InlayHint[]> {
|
||||||
|
const resource = model.uri;
|
||||||
|
const fileName = resource.toString();
|
||||||
|
const start = model.getOffsetAt({
|
||||||
|
lineNumber: range.startLineNumber,
|
||||||
|
column: range.startColumn
|
||||||
|
});
|
||||||
|
const end = model.getOffsetAt({
|
||||||
|
lineNumber: range.endLineNumber,
|
||||||
|
column: range.endColumn
|
||||||
|
});
|
||||||
|
const worker = await this._worker(resource);
|
||||||
|
if (model.isDisposed()) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const hints = await worker.provideInlayHints(fileName, start, end);
|
||||||
|
|
||||||
|
return hints.map(hint => {
|
||||||
|
return {
|
||||||
|
...hint,
|
||||||
|
position: model.getPositionAt(hint.position),
|
||||||
|
kind: this._convertHintKind(hint.kind)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private _convertHintKind (kind?: ts.InlayHintKind) {
|
||||||
|
switch (kind) {
|
||||||
|
case "Parameter":
|
||||||
|
return languages.InlayHintKind.Parameter;
|
||||||
|
case "Type":
|
||||||
|
return languages.InlayHintKind.Type;
|
||||||
|
default:
|
||||||
|
return languages.InlayHintKind.Other;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -452,6 +452,17 @@ export interface TypeScriptWorker {
|
||||||
errorCodes: number[],
|
errorCodes: number[],
|
||||||
formatOptions: any
|
formatOptions: any
|
||||||
): Promise<ReadonlyArray<any>>;
|
): Promise<ReadonlyArray<any>>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get inlay hints in the range of the file.
|
||||||
|
* @param fileName
|
||||||
|
* @returns `Promise<typescript.InlayHint[]>`
|
||||||
|
*/
|
||||||
|
provideInlayHints(
|
||||||
|
fileName: string,
|
||||||
|
start: number,
|
||||||
|
end: number,
|
||||||
|
): Promise<ReadonlyArray<any>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- TypeScript configuration and defaults ---------
|
// --- TypeScript configuration and defaults ---------
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ function setupMode(
|
||||||
);
|
);
|
||||||
languages.registerCodeActionProvider(modeId, new languageFeatures.CodeActionAdaptor(worker));
|
languages.registerCodeActionProvider(modeId, new languageFeatures.CodeActionAdaptor(worker));
|
||||||
languages.registerRenameProvider(modeId, new languageFeatures.RenameAdapter(worker));
|
languages.registerRenameProvider(modeId, new languageFeatures.RenameAdapter(worker));
|
||||||
|
languages.registerInlayHintsProvider(modeId, new languageFeatures.InlayHintsAdapter(worker));
|
||||||
new languageFeatures.DiagnosticsAdapter(libFiles, defaults, modeId, worker);
|
new languageFeatures.DiagnosticsAdapter(libFiles, defaults, modeId, worker);
|
||||||
|
|
||||||
return worker;
|
return worker;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -415,6 +415,29 @@ export class TypeScriptWorker implements ts.LanguageServiceHost, ITypeScriptWork
|
||||||
async updateExtraLibs(extraLibs: IExtraLibs): Promise<void> {
|
async updateExtraLibs(extraLibs: IExtraLibs): Promise<void> {
|
||||||
this._extraLibs = extraLibs;
|
this._extraLibs = extraLibs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async provideInlayHints(fileName: string, start: number, end: number): Promise<readonly ts.InlayHint[]> {
|
||||||
|
if (fileNameIsLib(fileName)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const preferences: ts.InlayHintsOptions = {
|
||||||
|
includeInlayParameterNameHints: "all"
|
||||||
|
};
|
||||||
|
const span: ts.TextSpan = {
|
||||||
|
start,
|
||||||
|
length: end - start
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return this._languageService.provideInlayHints(
|
||||||
|
fileName,
|
||||||
|
span,
|
||||||
|
preferences
|
||||||
|
);
|
||||||
|
} catch {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ICreateData {
|
export interface ICreateData {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue