Add ts/js deprecated support (#97742)
* Add ts/js deprecated support * Support callhierarchy * avoid tags * fix lint * fix lint * Avoid changes * Avoid assign * Avoid changes * Avoid styles * Add temp deps for build * update version * add config item * fix type * Use expiremental namepsace * fix types
This commit is contained in:
parent
60da9d867a
commit
9d6054c99d
|
@ -11,6 +11,13 @@ import { VersionDependentRegistration } from '../utils/dependentRegistration';
|
||||||
import type * as Proto from '../protocol';
|
import type * as Proto from '../protocol';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as PConst from '../protocol.const';
|
import * as PConst from '../protocol.const';
|
||||||
|
import { parseKindModifier } from '../utils/modifiers';
|
||||||
|
|
||||||
|
namespace Experimental {
|
||||||
|
export interface CallHierarchyItem extends Proto.CallHierarchyItem {
|
||||||
|
readonly kindModifiers?: string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class TypeScriptCallHierarchySupport implements vscode.CallHierarchyProvider {
|
class TypeScriptCallHierarchySupport implements vscode.CallHierarchyProvider {
|
||||||
public static readonly minVersion = API.v380;
|
public static readonly minVersion = API.v380;
|
||||||
|
@ -75,11 +82,11 @@ function isSourceFileItem(item: Proto.CallHierarchyItem) {
|
||||||
return item.kind === PConst.Kind.script || item.kind === PConst.Kind.module && item.selectionSpan.start.line === 1 && item.selectionSpan.start.offset === 1;
|
return item.kind === PConst.Kind.script || item.kind === PConst.Kind.module && item.selectionSpan.start.line === 1 && item.selectionSpan.start.offset === 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fromProtocolCallHierarchyItem(item: Proto.CallHierarchyItem): vscode.CallHierarchyItem {
|
function fromProtocolCallHierarchyItem(item: Experimental.CallHierarchyItem): vscode.CallHierarchyItem {
|
||||||
const useFileName = isSourceFileItem(item);
|
const useFileName = isSourceFileItem(item);
|
||||||
const name = useFileName ? path.basename(item.file) : item.name;
|
const name = useFileName ? path.basename(item.file) : item.name;
|
||||||
const detail = useFileName ? vscode.workspace.asRelativePath(path.dirname(item.file)) : '';
|
const detail = useFileName ? vscode.workspace.asRelativePath(path.dirname(item.file)) : '';
|
||||||
return new vscode.CallHierarchyItem(
|
const result = new vscode.CallHierarchyItem(
|
||||||
typeConverters.SymbolKind.fromProtocolScriptElementKind(item.kind),
|
typeConverters.SymbolKind.fromProtocolScriptElementKind(item.kind),
|
||||||
name,
|
name,
|
||||||
detail,
|
detail,
|
||||||
|
@ -87,6 +94,12 @@ function fromProtocolCallHierarchyItem(item: Proto.CallHierarchyItem): vscode.Ca
|
||||||
typeConverters.Range.fromTextSpan(item.span),
|
typeConverters.Range.fromTextSpan(item.span),
|
||||||
typeConverters.Range.fromTextSpan(item.selectionSpan)
|
typeConverters.Range.fromTextSpan(item.selectionSpan)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const kindModifiers = item.kindModifiers ? parseKindModifier(item.kindModifiers) : undefined;
|
||||||
|
if (kindModifiers?.has(PConst.KindModifiers.depreacted)) {
|
||||||
|
result.tags = [vscode.SymbolTag.Deprecated];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function fromProtocolCallHierchyIncomingCall(item: Proto.CallHierarchyIncomingCall): vscode.CallHierarchyIncomingCall {
|
function fromProtocolCallHierchyIncomingCall(item: Proto.CallHierarchyIncomingCall): vscode.CallHierarchyIncomingCall {
|
||||||
|
|
|
@ -19,6 +19,7 @@ import { TelemetryReporter } from '../utils/telemetry';
|
||||||
import * as typeConverters from '../utils/typeConverters';
|
import * as typeConverters from '../utils/typeConverters';
|
||||||
import TypingsStatus from '../utils/typingsStatus';
|
import TypingsStatus from '../utils/typingsStatus';
|
||||||
import FileConfigurationManager from './fileConfigurationManager';
|
import FileConfigurationManager from './fileConfigurationManager';
|
||||||
|
import { parseKindModifier } from '../utils/modifiers';
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
|
@ -90,8 +91,8 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsEntry.kindModifiers) {
|
if (tsEntry.kindModifiers) {
|
||||||
const kindModifiers = tsEntry.kindModifiers.split(/,|\s+/g);
|
const kindModifiers = parseKindModifier(tsEntry.kindModifiers);
|
||||||
if (kindModifiers.includes(PConst.KindModifiers.optional)) {
|
if (kindModifiers.has(PConst.KindModifiers.optional)) {
|
||||||
if (!this.insertText) {
|
if (!this.insertText) {
|
||||||
this.insertText = this.label;
|
this.insertText = this.label;
|
||||||
}
|
}
|
||||||
|
@ -101,14 +102,17 @@ class MyCompletionItem extends vscode.CompletionItem {
|
||||||
}
|
}
|
||||||
this.label += '?';
|
this.label += '?';
|
||||||
}
|
}
|
||||||
|
if (kindModifiers.has(PConst.KindModifiers.depreacted)) {
|
||||||
|
this.tags = [vscode.CompletionItemTag.Deprecated];
|
||||||
|
}
|
||||||
|
|
||||||
if (kindModifiers.includes(PConst.KindModifiers.color)) {
|
if (kindModifiers.has(PConst.KindModifiers.color)) {
|
||||||
this.kind = vscode.CompletionItemKind.Color;
|
this.kind = vscode.CompletionItemKind.Color;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tsEntry.kind === PConst.Kind.script) {
|
if (tsEntry.kind === PConst.Kind.script) {
|
||||||
for (const extModifier of PConst.KindModifiers.fileExtensionKindModifiers) {
|
for (const extModifier of PConst.KindModifiers.fileExtensionKindModifiers) {
|
||||||
if (kindModifiers.includes(extModifier)) {
|
if (kindModifiers.has(extModifier)) {
|
||||||
if (tsEntry.name.toLowerCase().endsWith(extModifier)) {
|
if (tsEntry.name.toLowerCase().endsWith(extModifier)) {
|
||||||
this.detail = tsEntry.name;
|
this.detail = tsEntry.name;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -78,7 +78,7 @@ class FileDiagnostics {
|
||||||
return this.get(DiagnosticKind.Suggestion).filter(x => {
|
return this.get(DiagnosticKind.Suggestion).filter(x => {
|
||||||
if (!enableSuggestions) {
|
if (!enableSuggestions) {
|
||||||
// Still show unused
|
// Still show unused
|
||||||
return x.tags && x.tags.includes(vscode.DiagnosticTag.Unnecessary);
|
return x.tags && (x.tags.includes(vscode.DiagnosticTag.Unnecessary) || x.tags.includes(vscode.DiagnosticTag.Deprecated));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
|
@ -9,6 +9,7 @@ import * as PConst from '../protocol.const';
|
||||||
import { ITypeScriptServiceClient } from '../typescriptService';
|
import { ITypeScriptServiceClient } from '../typescriptService';
|
||||||
import * as typeConverters from '../utils/typeConverters';
|
import * as typeConverters from '../utils/typeConverters';
|
||||||
import { CachedResponse } from '../tsServer/cachedResponse';
|
import { CachedResponse } from '../tsServer/cachedResponse';
|
||||||
|
import { parseKindModifier } from '../utils/modifiers';
|
||||||
|
|
||||||
const getSymbolKind = (kind: string): vscode.SymbolKind => {
|
const getSymbolKind = (kind: string): vscode.SymbolKind => {
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
|
@ -79,6 +80,12 @@ class TypeScriptDocumentSymbolProvider implements vscode.DocumentSymbolProvider
|
||||||
range,
|
range,
|
||||||
range.contains(selectionRange) ? selectionRange : range);
|
range.contains(selectionRange) ? selectionRange : range);
|
||||||
|
|
||||||
|
|
||||||
|
const kindModifiers = parseKindModifier(item.kindModifiers);
|
||||||
|
if (kindModifiers.has(PConst.KindModifiers.depreacted)) {
|
||||||
|
symbolInfo.tags = [vscode.SymbolTag.Deprecated];
|
||||||
|
}
|
||||||
|
|
||||||
for (const child of children) {
|
for (const child of children) {
|
||||||
if (child.spans.some(span => !!range.intersection(typeConverters.Range.fromTextSpan(span)))) {
|
if (child.spans.some(span => !!range.intersection(typeConverters.Range.fromTextSpan(span)))) {
|
||||||
const includedChild = TypeScriptDocumentSymbolProvider.convertNavTree(resource, symbolInfo.children, child);
|
const includedChild = TypeScriptDocumentSymbolProvider.convertNavTree(resource, symbolInfo.children, child);
|
||||||
|
|
|
@ -11,6 +11,7 @@ import API from '../utils/api';
|
||||||
import * as fileSchemes from '../utils/fileSchemes';
|
import * as fileSchemes from '../utils/fileSchemes';
|
||||||
import { doesResourceLookLikeAJavaScriptFile, doesResourceLookLikeATypeScriptFile } from '../utils/languageDescription';
|
import { doesResourceLookLikeAJavaScriptFile, doesResourceLookLikeATypeScriptFile } from '../utils/languageDescription';
|
||||||
import * as typeConverters from '../utils/typeConverters';
|
import * as typeConverters from '../utils/typeConverters';
|
||||||
|
import { parseKindModifier } from '../utils/modifiers';
|
||||||
|
|
||||||
function getSymbolKind(item: Proto.NavtoItem): vscode.SymbolKind {
|
function getSymbolKind(item: Proto.NavtoItem): vscode.SymbolKind {
|
||||||
switch (item.kind) {
|
switch (item.kind) {
|
||||||
|
@ -90,11 +91,16 @@ class TypeScriptWorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvide
|
||||||
|
|
||||||
private toSymbolInformation(item: Proto.NavtoItem) {
|
private toSymbolInformation(item: Proto.NavtoItem) {
|
||||||
const label = TypeScriptWorkspaceSymbolProvider.getLabel(item);
|
const label = TypeScriptWorkspaceSymbolProvider.getLabel(item);
|
||||||
return new vscode.SymbolInformation(
|
const info = new vscode.SymbolInformation(
|
||||||
label,
|
label,
|
||||||
getSymbolKind(item),
|
getSymbolKind(item),
|
||||||
item.containerName || '',
|
item.containerName || '',
|
||||||
typeConverters.Location.fromTextSpan(this.client.toResource(item.file), item));
|
typeConverters.Location.fromTextSpan(this.client.toResource(item.file), item));
|
||||||
|
const kindModifiers = item.kindModifiers ? parseKindModifier(item.kindModifiers) : undefined;
|
||||||
|
if (kindModifiers?.has(PConst.KindModifiers.depreacted)) {
|
||||||
|
info.tags = [vscode.SymbolTag.Deprecated];
|
||||||
|
}
|
||||||
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static getLabel(item: Proto.NavtoItem) {
|
private static getLabel(item: Proto.NavtoItem) {
|
||||||
|
|
|
@ -122,16 +122,21 @@ export default class LanguageProvider extends Disposable {
|
||||||
this.client.bufferSyncSupport.requestAllDiagnostics();
|
this.client.bufferSyncSupport.requestAllDiagnostics();
|
||||||
}
|
}
|
||||||
|
|
||||||
public diagnosticsReceived(diagnosticsKind: DiagnosticKind, file: vscode.Uri, diagnostics: (vscode.Diagnostic & { reportUnnecessary: any })[]): void {
|
public diagnosticsReceived(diagnosticsKind: DiagnosticKind, file: vscode.Uri, diagnostics: (vscode.Diagnostic & { reportUnnecessary: any, reportDeprecated: any })[]): void {
|
||||||
const config = vscode.workspace.getConfiguration(this.id, file);
|
const config = vscode.workspace.getConfiguration(this.id, file);
|
||||||
const reportUnnecessary = config.get<boolean>('showUnused', true);
|
const reportUnnecessary = config.get<boolean>('showUnused', true);
|
||||||
|
const reportDeprecated = config.get<boolean>('showDeprecated', true);
|
||||||
this.client.diagnosticsManager.updateDiagnostics(file, this._diagnosticLanguage, diagnosticsKind, diagnostics.filter(diag => {
|
this.client.diagnosticsManager.updateDiagnostics(file, this._diagnosticLanguage, diagnosticsKind, diagnostics.filter(diag => {
|
||||||
if (!reportUnnecessary) {
|
if (!reportUnnecessary) {
|
||||||
diag.tags = undefined;
|
|
||||||
if (diag.reportUnnecessary && diag.severity === vscode.DiagnosticSeverity.Hint) {
|
if (diag.reportUnnecessary && diag.severity === vscode.DiagnosticSeverity.Hint) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!reportDeprecated) {
|
||||||
|
if (diag.reportDeprecated && diag.severity === vscode.DiagnosticSeverity.Hint) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ export class DiagnosticCategory {
|
||||||
|
|
||||||
export class KindModifiers {
|
export class KindModifiers {
|
||||||
public static readonly optional = 'optional';
|
public static readonly optional = 'optional';
|
||||||
|
public static readonly depreacted = 'deprecated';
|
||||||
public static readonly color = 'color';
|
public static readonly color = 'color';
|
||||||
|
|
||||||
public static readonly dtsFile = '.d.ts';
|
public static readonly dtsFile = '.d.ts';
|
||||||
|
|
|
@ -26,6 +26,12 @@ import * as typeConverters from './utils/typeConverters';
|
||||||
import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus';
|
import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus';
|
||||||
import VersionStatus from './utils/versionStatus';
|
import VersionStatus from './utils/versionStatus';
|
||||||
|
|
||||||
|
namespace Experimental {
|
||||||
|
export interface Diagnostic extends Proto.Diagnostic {
|
||||||
|
readonly reportsDeprecated?: {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Style check diagnostics that can be reported as warnings
|
// Style check diagnostics that can be reported as warnings
|
||||||
const styleCheckDiagnostics = new Set([
|
const styleCheckDiagnostics = new Set([
|
||||||
...errorCodes.variableDeclaredButNeverUsed,
|
...errorCodes.variableDeclaredButNeverUsed,
|
||||||
|
@ -233,11 +239,11 @@ export default class TypeScriptServiceClientHost extends Disposable {
|
||||||
private createMarkerDatas(
|
private createMarkerDatas(
|
||||||
diagnostics: Proto.Diagnostic[],
|
diagnostics: Proto.Diagnostic[],
|
||||||
source: string
|
source: string
|
||||||
): (vscode.Diagnostic & { reportUnnecessary: any })[] {
|
): (vscode.Diagnostic & { reportUnnecessary: any, reportDeprecated: any })[] {
|
||||||
return diagnostics.map(tsDiag => this.tsDiagnosticToVsDiagnostic(tsDiag, source));
|
return diagnostics.map(tsDiag => this.tsDiagnosticToVsDiagnostic(tsDiag, source));
|
||||||
}
|
}
|
||||||
|
|
||||||
private tsDiagnosticToVsDiagnostic(diagnostic: Proto.Diagnostic, source: string): vscode.Diagnostic & { reportUnnecessary: any } {
|
private tsDiagnosticToVsDiagnostic(diagnostic: Experimental.Diagnostic, source: string): vscode.Diagnostic & { reportUnnecessary: any, reportDeprecated: any } {
|
||||||
const { start, end, text } = diagnostic;
|
const { start, end, text } = diagnostic;
|
||||||
const range = new vscode.Range(typeConverters.Position.fromLocation(start), typeConverters.Position.fromLocation(end));
|
const range = new vscode.Range(typeConverters.Position.fromLocation(start), typeConverters.Position.fromLocation(end));
|
||||||
const converted = new vscode.Diagnostic(range, text, this.getDiagnosticSeverity(diagnostic));
|
const converted = new vscode.Diagnostic(range, text, this.getDiagnosticSeverity(diagnostic));
|
||||||
|
@ -255,11 +261,19 @@ export default class TypeScriptServiceClientHost extends Disposable {
|
||||||
return new vscode.DiagnosticRelatedInformation(typeConverters.Location.fromTextSpan(this.client.toResource(span.file), span), info.message);
|
return new vscode.DiagnosticRelatedInformation(typeConverters.Location.fromTextSpan(this.client.toResource(span.file), span), info.message);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
const tags: vscode.DiagnosticTag[] = [];
|
||||||
if (diagnostic.reportsUnnecessary) {
|
if (diagnostic.reportsUnnecessary) {
|
||||||
converted.tags = [vscode.DiagnosticTag.Unnecessary];
|
tags.push(vscode.DiagnosticTag.Unnecessary);
|
||||||
}
|
}
|
||||||
(converted as vscode.Diagnostic & { reportUnnecessary: any }).reportUnnecessary = diagnostic.reportsUnnecessary;
|
if (diagnostic.reportsDeprecated) {
|
||||||
return converted as vscode.Diagnostic & { reportUnnecessary: any };
|
tags.push(vscode.DiagnosticTag.Deprecated);
|
||||||
|
}
|
||||||
|
converted.tags = tags.length ? tags : undefined;
|
||||||
|
|
||||||
|
const resultConverted = converted as vscode.Diagnostic & { reportUnnecessary: any, reportDeprecated: any };
|
||||||
|
resultConverted.reportUnnecessary = diagnostic.reportsUnnecessary;
|
||||||
|
resultConverted.reportDeprecated = diagnostic.reportsDeprecated;
|
||||||
|
return resultConverted;
|
||||||
}
|
}
|
||||||
|
|
||||||
private getDiagnosticSeverity(diagnostic: Proto.Diagnostic): vscode.DiagnosticSeverity {
|
private getDiagnosticSeverity(diagnostic: Proto.Diagnostic): vscode.DiagnosticSeverity {
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
export function parseKindModifier(kindModifiers: string): Set<string> {
|
||||||
|
return new Set(kindModifiers.split(/,|\s+/g));
|
||||||
|
}
|
|
@ -594,6 +594,10 @@ export interface IEditorOptions {
|
||||||
* Defaults to false.
|
* Defaults to false.
|
||||||
*/
|
*/
|
||||||
definitionLinkOpensInPeek?: boolean;
|
definitionLinkOpensInPeek?: boolean;
|
||||||
|
/**
|
||||||
|
* Controls strikethrough deprecated variables.
|
||||||
|
*/
|
||||||
|
showDeprecated?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IEditorConstructionOptions extends IEditorOptions {
|
export interface IEditorConstructionOptions extends IEditorOptions {
|
||||||
|
@ -3591,6 +3595,7 @@ export const enum EditorOption {
|
||||||
wordWrapMinified,
|
wordWrapMinified,
|
||||||
wrappingIndent,
|
wrappingIndent,
|
||||||
wrappingStrategy,
|
wrappingStrategy,
|
||||||
|
showDeprecated,
|
||||||
|
|
||||||
// Leave these at the end (because they have dependencies!)
|
// Leave these at the end (because they have dependencies!)
|
||||||
editorClassName,
|
editorClassName,
|
||||||
|
@ -4077,6 +4082,10 @@ export const EditorOptions = {
|
||||||
EditorOption.showUnused, 'showUnused', true,
|
EditorOption.showUnused, 'showUnused', true,
|
||||||
{ description: nls.localize('showUnused', "Controls fading out of unused code.") }
|
{ description: nls.localize('showUnused', "Controls fading out of unused code.") }
|
||||||
)),
|
)),
|
||||||
|
showDeprecated: register(new EditorBooleanOption(
|
||||||
|
EditorOption.showDeprecated, 'showDeprecated', true,
|
||||||
|
{ description: nls.localize('showDeprecated', "Controls strikethrough deprecated variables.") }
|
||||||
|
)),
|
||||||
snippetSuggestions: register(new EditorStringEnumOption(
|
snippetSuggestions: register(new EditorStringEnumOption(
|
||||||
EditorOption.snippetSuggestions, 'snippetSuggestions',
|
EditorOption.snippetSuggestions, 'snippetSuggestions',
|
||||||
'inline' as 'top' | 'bottom' | 'inline' | 'none',
|
'inline' as 'top' | 'bottom' | 'inline' | 'none',
|
||||||
|
|
|
@ -279,11 +279,12 @@ export enum EditorOption {
|
||||||
wordWrapMinified = 109,
|
wordWrapMinified = 109,
|
||||||
wrappingIndent = 110,
|
wrappingIndent = 110,
|
||||||
wrappingStrategy = 111,
|
wrappingStrategy = 111,
|
||||||
editorClassName = 112,
|
showDeprecated = 112,
|
||||||
pixelRatio = 113,
|
editorClassName = 113,
|
||||||
tabFocusMode = 114,
|
pixelRatio = 114,
|
||||||
layoutInfo = 115,
|
tabFocusMode = 115,
|
||||||
wrappingInfo = 116
|
layoutInfo = 116,
|
||||||
|
wrappingInfo = 117
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
16
src/vs/monaco.d.ts
vendored
16
src/vs/monaco.d.ts
vendored
|
@ -3129,6 +3129,10 @@ declare namespace monaco.editor {
|
||||||
* Defaults to false.
|
* Defaults to false.
|
||||||
*/
|
*/
|
||||||
definitionLinkOpensInPeek?: boolean;
|
definitionLinkOpensInPeek?: boolean;
|
||||||
|
/**
|
||||||
|
* Controls strikethrough deprecated variables.
|
||||||
|
*/
|
||||||
|
showDeprecated?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IEditorConstructionOptions extends IEditorOptions {
|
export interface IEditorConstructionOptions extends IEditorOptions {
|
||||||
|
@ -3945,11 +3949,12 @@ declare namespace monaco.editor {
|
||||||
wordWrapMinified = 109,
|
wordWrapMinified = 109,
|
||||||
wrappingIndent = 110,
|
wrappingIndent = 110,
|
||||||
wrappingStrategy = 111,
|
wrappingStrategy = 111,
|
||||||
editorClassName = 112,
|
showDeprecated = 112,
|
||||||
pixelRatio = 113,
|
editorClassName = 113,
|
||||||
tabFocusMode = 114,
|
pixelRatio = 114,
|
||||||
layoutInfo = 115,
|
tabFocusMode = 115,
|
||||||
wrappingInfo = 116
|
layoutInfo = 116,
|
||||||
|
wrappingInfo = 117
|
||||||
}
|
}
|
||||||
export const EditorOptions: {
|
export const EditorOptions: {
|
||||||
acceptSuggestionOnCommitCharacter: IEditorOption<EditorOption.acceptSuggestionOnCommitCharacter, boolean>;
|
acceptSuggestionOnCommitCharacter: IEditorOption<EditorOption.acceptSuggestionOnCommitCharacter, boolean>;
|
||||||
|
@ -4045,6 +4050,7 @@ declare namespace monaco.editor {
|
||||||
selectOnLineNumbers: IEditorOption<EditorOption.selectOnLineNumbers, boolean>;
|
selectOnLineNumbers: IEditorOption<EditorOption.selectOnLineNumbers, boolean>;
|
||||||
showFoldingControls: IEditorOption<EditorOption.showFoldingControls, 'always' | 'mouseover'>;
|
showFoldingControls: IEditorOption<EditorOption.showFoldingControls, 'always' | 'mouseover'>;
|
||||||
showUnused: IEditorOption<EditorOption.showUnused, boolean>;
|
showUnused: IEditorOption<EditorOption.showUnused, boolean>;
|
||||||
|
showDeprecated: IEditorOption<EditorOption.showDeprecated, boolean>;
|
||||||
snippetSuggestions: IEditorOption<EditorOption.snippetSuggestions, 'none' | 'top' | 'bottom' | 'inline'>;
|
snippetSuggestions: IEditorOption<EditorOption.snippetSuggestions, 'none' | 'top' | 'bottom' | 'inline'>;
|
||||||
smoothScrolling: IEditorOption<EditorOption.smoothScrolling, boolean>;
|
smoothScrolling: IEditorOption<EditorOption.smoothScrolling, boolean>;
|
||||||
stopRenderingLineAfter: IEditorOption<EditorOption.stopRenderingLineAfter, number>;
|
stopRenderingLineAfter: IEditorOption<EditorOption.stopRenderingLineAfter, number>;
|
||||||
|
|
|
@ -73,7 +73,7 @@ class DocumentSymbolAdapter {
|
||||||
const element: modes.DocumentSymbol = {
|
const element: modes.DocumentSymbol = {
|
||||||
name: info.name || '!!MISSING: name!!',
|
name: info.name || '!!MISSING: name!!',
|
||||||
kind: typeConvert.SymbolKind.from(info.kind),
|
kind: typeConvert.SymbolKind.from(info.kind),
|
||||||
tags: info.tags ? info.tags.map(typeConvert.SymbolTag.from) : [],
|
tags: info.tags?.map(typeConvert.SymbolTag.from) || [],
|
||||||
detail: '',
|
detail: '',
|
||||||
containerName: info.containerName,
|
containerName: info.containerName,
|
||||||
range: typeConvert.Range.from(info.location.range),
|
range: typeConvert.Range.from(info.location.range),
|
||||||
|
@ -1287,6 +1287,7 @@ class CallHierarchyAdapter {
|
||||||
uri: item.uri,
|
uri: item.uri,
|
||||||
range: typeConvert.Range.from(item.range),
|
range: typeConvert.Range.from(item.range),
|
||||||
selectionRange: typeConvert.Range.from(item.selectionRange),
|
selectionRange: typeConvert.Range.from(item.selectionRange),
|
||||||
|
tags: item.tags?.map(typeConvert.SymbolTag.from)
|
||||||
};
|
};
|
||||||
map.set(dto._itemId, item);
|
map.set(dto._itemId, item);
|
||||||
return dto;
|
return dto;
|
||||||
|
|
|
@ -646,7 +646,7 @@ export namespace DocumentSymbol {
|
||||||
range: Range.from(info.range),
|
range: Range.from(info.range),
|
||||||
selectionRange: Range.from(info.selectionRange),
|
selectionRange: Range.from(info.selectionRange),
|
||||||
kind: SymbolKind.from(info.kind),
|
kind: SymbolKind.from(info.kind),
|
||||||
tags: info.tags ? info.tags.map(SymbolTag.from) : []
|
tags: info.tags?.map(SymbolTag.from) ?? []
|
||||||
};
|
};
|
||||||
if (info.children) {
|
if (info.children) {
|
||||||
result.children = info.children.map(from);
|
result.children = info.children.map(from);
|
||||||
|
@ -911,7 +911,7 @@ export namespace CompletionItem {
|
||||||
|
|
||||||
result.insertText = suggestion.insertText;
|
result.insertText = suggestion.insertText;
|
||||||
result.kind = CompletionItemKind.to(suggestion.kind);
|
result.kind = CompletionItemKind.to(suggestion.kind);
|
||||||
result.tags = suggestion.tags && suggestion.tags.map(CompletionItemTag.to);
|
result.tags = suggestion.tags?.map(CompletionItemTag.to);
|
||||||
result.detail = suggestion.detail;
|
result.detail = suggestion.detail;
|
||||||
result.documentation = htmlContent.isMarkdownString(suggestion.documentation) ? MarkdownString.to(suggestion.documentation) : suggestion.documentation;
|
result.documentation = htmlContent.isMarkdownString(suggestion.documentation) ? MarkdownString.to(suggestion.documentation) : suggestion.documentation;
|
||||||
result.sortText = suggestion.sortText;
|
result.sortText = suggestion.sortText;
|
||||||
|
|
|
@ -9,7 +9,7 @@ import { CancellationToken } from 'vs/base/common/cancellation';
|
||||||
import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
import { IIdentityProvider, IListVirtualDelegate } from 'vs/base/browser/ui/list/list';
|
||||||
import { FuzzyScore, createMatches } from 'vs/base/common/filters';
|
import { FuzzyScore, createMatches } from 'vs/base/common/filters';
|
||||||
import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel';
|
import { IconLabel } from 'vs/base/browser/ui/iconLabel/iconLabel';
|
||||||
import { SymbolKinds, Location } from 'vs/editor/common/modes';
|
import { SymbolKinds, Location, SymbolTag } from 'vs/editor/common/modes';
|
||||||
import { compare } from 'vs/base/common/strings';
|
import { compare } from 'vs/base/common/strings';
|
||||||
import { Range } from 'vs/editor/common/core/range';
|
import { Range } from 'vs/editor/common/core/range';
|
||||||
import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget';
|
import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget';
|
||||||
|
@ -117,11 +117,12 @@ export class CallRenderer implements ITreeRenderer<Call, FuzzyScore, CallRenderi
|
||||||
|
|
||||||
renderElement(node: ITreeNode<Call, FuzzyScore>, _index: number, template: CallRenderingTemplate): void {
|
renderElement(node: ITreeNode<Call, FuzzyScore>, _index: number, template: CallRenderingTemplate): void {
|
||||||
const { element, filterData } = node;
|
const { element, filterData } = node;
|
||||||
|
const deprecated = element.item.tags?.includes(SymbolTag.Deprecated);
|
||||||
template.icon.className = SymbolKinds.toCssClassName(element.item.kind, true);
|
template.icon.className = SymbolKinds.toCssClassName(element.item.kind, true);
|
||||||
template.label.setLabel(
|
template.label.setLabel(
|
||||||
element.item.name,
|
element.item.name,
|
||||||
element.item.detail,
|
element.item.detail,
|
||||||
{ labelEscapeNewLines: true, matches: createMatches(filterData) }
|
{ labelEscapeNewLines: true, matches: createMatches(filterData), strikethrough: deprecated }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
disposeTemplate(template: CallRenderingTemplate): void {
|
disposeTemplate(template: CallRenderingTemplate): void {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { IRange } from 'vs/editor/common/core/range';
|
import { IRange } from 'vs/editor/common/core/range';
|
||||||
import { SymbolKind, ProviderResult } from 'vs/editor/common/modes';
|
import { SymbolKind, ProviderResult, SymbolTag } from 'vs/editor/common/modes';
|
||||||
import { ITextModel } from 'vs/editor/common/model';
|
import { ITextModel } from 'vs/editor/common/model';
|
||||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||||
import { LanguageFeatureRegistry } from 'vs/editor/common/modes/languageFeatureRegistry';
|
import { LanguageFeatureRegistry } from 'vs/editor/common/modes/languageFeatureRegistry';
|
||||||
|
@ -32,6 +32,7 @@ export interface CallHierarchyItem {
|
||||||
uri: URI;
|
uri: URI;
|
||||||
range: IRange;
|
range: IRange;
|
||||||
selectionRange: IRange;
|
selectionRange: IRange;
|
||||||
|
tags?: SymbolTag[]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IncomingCall {
|
export interface IncomingCall {
|
||||||
|
|
Loading…
Reference in a new issue