From d3642c3f60119784e15b8b0d1bad921c70020da7 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 8 Sep 2021 09:06:13 -0700 Subject: [PATCH] Removing support for old style markdown symbol links in vscode.d.ts Fixes #132663 --- .../extension.webpack.config.js | 1 - extensions/extension-editing/package.json | 3 +- .../src/extensionEditingMain.ts | 93 ------------------- src/vs/vscode.proposed.d.ts | 2 +- 4 files changed, 2 insertions(+), 97 deletions(-) diff --git a/extensions/extension-editing/extension.webpack.config.js b/extensions/extension-editing/extension.webpack.config.js index 82c41507169..ab1c951fdda 100644 --- a/extensions/extension-editing/extension.webpack.config.js +++ b/extensions/extension-editing/extension.webpack.config.js @@ -19,6 +19,5 @@ module.exports = withDefaults({ }, externals: { '../../../product.json': 'commonjs ../../../product.json', - 'typescript': 'commonjs typescript' } }); diff --git a/extensions/extension-editing/package.json b/extensions/extension-editing/package.json index e48ed9160f8..c57ee402b36 100644 --- a/extensions/extension-editing/package.json +++ b/extensions/extension-editing/package.json @@ -11,8 +11,7 @@ "icon": "images/icon.png", "activationEvents": [ "onLanguage:json", - "onLanguage:markdown", - "onLanguage:typescript" + "onLanguage:markdown" ], "main": "./out/extensionEditingMain", "browser": "./dist/browser/extensionEditingBrowserMain", diff --git a/extensions/extension-editing/src/extensionEditingMain.ts b/extensions/extension-editing/src/extensionEditingMain.ts index 1d07c907acd..9dc71a46896 100644 --- a/extensions/extension-editing/src/extensionEditingMain.ts +++ b/extensions/extension-editing/src/extensionEditingMain.ts @@ -4,13 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import * as ts from 'typescript'; import { PackageDocument } from './packageDocumentHelper'; import { ExtensionLinter } from './extensionLinter'; export function activate(context: vscode.ExtensionContext) { - const registration = vscode.languages.registerDocumentLinkProvider({ language: 'typescript', pattern: '**/vscode.d.ts' }, _linkProvider); - context.subscriptions.push(registration); //package.json suggestions context.subscriptions.push(registerPackageDocumentCompletions()); @@ -18,96 +15,6 @@ export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(new ExtensionLinter()); } -const _linkProvider = new class implements vscode.DocumentLinkProvider { - - private _cachedResult: { key: string; links: vscode.DocumentLink[] } | undefined; - private _linkPattern = /[^!]\[.*?\]\(#(.*?)\)/g; - - async provideDocumentLinks(document: vscode.TextDocument, _token: vscode.CancellationToken): Promise { - const key = `${document.uri.toString()}@${document.version}`; - if (!this._cachedResult || this._cachedResult.key !== key) { - const links = await this._computeDocumentLinks(document); - this._cachedResult = { key, links }; - } - return this._cachedResult.links; - } - - private async _computeDocumentLinks(document: vscode.TextDocument): Promise { - - const results: vscode.DocumentLink[] = []; - const text = document.getText(); - const lookUp = await ast.createNamedNodeLookUp(text); - - this._linkPattern.lastIndex = 0; - let match: RegExpMatchArray | null = null; - while ((match = this._linkPattern.exec(text))) { - - const offset = lookUp(match[1]); - if (offset === -1) { - console.warn(`Could not find symbol for link ${match[1]}`); - continue; - } - - const targetPos = document.positionAt(offset); - const linkEnd = document.positionAt(this._linkPattern.lastIndex - 1); - const linkStart = linkEnd.translate({ characterDelta: -(1 + match[1].length) }); - - results.push(new vscode.DocumentLink( - new vscode.Range(linkStart, linkEnd), - document.uri.with({ fragment: `${1 + targetPos.line}` }))); - } - - return results; - } -}; - -namespace ast { - - export interface NamedNodeLookUp { - (dottedName: string): number; - } - - export async function createNamedNodeLookUp(str: string): Promise { - - const ts = await import('typescript'); - - const sourceFile = ts.createSourceFile('fake.d.ts', str, ts.ScriptTarget.Latest); - - const identifiers: string[] = []; - const spans: number[] = []; - - ts.forEachChild(sourceFile, function visit(node: ts.Node) { - const declIdent = (node).name; - if (declIdent && declIdent.kind === ts.SyntaxKind.Identifier) { - identifiers.push((declIdent).text); - spans.push(node.pos, node.end); - } - ts.forEachChild(node, visit); - }); - - return function (dottedName: string): number { - let start = -1; - let end = Number.MAX_VALUE; - - for (let name of dottedName.split('.')) { - let idx: number = -1; - while ((idx = identifiers.indexOf(name, idx + 1)) >= 0) { - let myStart = spans[2 * idx]; - let myEnd = spans[2 * idx + 1]; - if (myStart >= start && myEnd <= end) { - start = myStart; - end = myEnd; - break; - } - } - if (idx < 0) { - return -1; - } - } - return start; - }; - } -} function registerPackageDocumentCompletions(): vscode.Disposable { return vscode.languages.registerCompletionItemProvider({ language: 'json', pattern: '**/package.json' }, { diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index bf6299537ce..23db1b1adee 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -2906,7 +2906,7 @@ declare module 'vscode' { * * @param selector A selector that defines the documents this provider is applicable to. * @param provider A type hierarchy provider. - * @returns {@link Disposable disposable} that unregisters this provider when being disposed. + * @return {@link Disposable Disposable} that unregisters this provider when being disposed. */ export function registerTypeHierarchyProvider(selector: DocumentSelector, provider: TypeHierarchyProvider): Disposable; }