mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 15:05:39 +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[],
|
||||
formatOptions: 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 typescriptDefaults: LanguageServiceDefaults;
|
||||
|
|
|
|||
|
|
@ -1221,3 +1221,49 @@ export class RenameAdapter extends Adapter implements languages.RenameProvider {
|
|||
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[],
|
||||
formatOptions: 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 ---------
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ function setupMode(
|
|||
);
|
||||
languages.registerCodeActionProvider(modeId, new languageFeatures.CodeActionAdaptor(worker));
|
||||
languages.registerRenameProvider(modeId, new languageFeatures.RenameAdapter(worker));
|
||||
languages.registerInlayHintsProvider(modeId, new languageFeatures.InlayHintsAdapter(worker));
|
||||
new languageFeatures.DiagnosticsAdapter(libFiles, defaults, modeId, worker);
|
||||
|
||||
return worker;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -253,7 +253,7 @@ export class TypeScriptWorker implements ts.LanguageServiceHost, ITypeScriptWork
|
|||
entry,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined
|
||||
);
|
||||
}
|
||||
|
|
@ -415,6 +415,29 @@ export class TypeScriptWorker implements ts.LanguageServiceHost, ITypeScriptWork
|
|||
async updateExtraLibs(extraLibs: IExtraLibs): Promise<void> {
|
||||
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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue