Skip to content

Commit 07144d2

Browse files
authored
Rename types in the markdown extension (microsoft#152905)
Renames in the markdown extension This renames some types and splits up some files as part of an exploration towards a proper LSP. Changes: - `SkinnyTextDocument` -> `ITextDocument` - Moved `ITextDocument` to own file - `MdWorkspaceContents` -> `IMdWorkspace`
1 parent 5f0a388 commit 07144d2

35 files changed

+353
-336
lines changed

extensions/markdown-language-features/src/commands/renderDocument.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { Command } from '../commandManager';
77
import { MarkdownItEngine } from '../markdownEngine';
8-
import { SkinnyTextDocument } from '../workspaceContents';
8+
import { ITextDocument } from '../types/textDocument';
99

1010
export class RenderDocument implements Command {
1111
public readonly id = 'markdown.api.render';
@@ -14,7 +14,7 @@ export class RenderDocument implements Command {
1414
private readonly engine: MarkdownItEngine
1515
) { }
1616

17-
public async execute(document: SkinnyTextDocument | string): Promise<string> {
17+
public async execute(document: ITextDocument | string): Promise<string> {
1818
return (await (this.engine.render(document))).html;
1919
}
2020
}

extensions/markdown-language-features/src/extension.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import { ContentSecurityPolicyArbiter, ExtensionContentSecurityPolicyArbiter, Pr
2828
import { githubSlugifier } from './slugify';
2929
import { MdTableOfContentsProvider } from './tableOfContents';
3030
import { loadDefaultTelemetryReporter, TelemetryReporter } from './telemetryReporter';
31-
import { MdWorkspaceContents, VsCodeMdWorkspaceContents } from './workspaceContents';
31+
import { IMdWorkspace, VsCodeMdWorkspace } from './workspace';
3232

3333

3434
export function activate(context: vscode.ExtensionContext) {
@@ -45,16 +45,16 @@ export function activate(context: vscode.ExtensionContext) {
4545
const commandManager = new CommandManager();
4646

4747
const engine = new MarkdownItEngine(contributions, githubSlugifier, logger);
48-
const workspaceContents = new VsCodeMdWorkspaceContents();
49-
const parser = new MdParsingProvider(engine, workspaceContents);
50-
const tocProvider = new MdTableOfContentsProvider(parser, workspaceContents, logger);
51-
context.subscriptions.push(workspaceContents, parser, tocProvider);
48+
const workspace = new VsCodeMdWorkspace();
49+
const parser = new MdParsingProvider(engine, workspace);
50+
const tocProvider = new MdTableOfContentsProvider(parser, workspace, logger);
51+
context.subscriptions.push(workspace, parser, tocProvider);
5252

5353
const contentProvider = new MdDocumentRenderer(engine, context, cspArbiter, contributions, logger);
5454
const previewManager = new MarkdownPreviewManager(contentProvider, logger, contributions, tocProvider);
5555
context.subscriptions.push(previewManager);
5656

57-
context.subscriptions.push(registerMarkdownLanguageFeatures(parser, workspaceContents, commandManager, tocProvider, logger));
57+
context.subscriptions.push(registerMarkdownLanguageFeatures(parser, workspace, commandManager, tocProvider, logger));
5858
context.subscriptions.push(registerMarkdownCommands(commandManager, previewManager, telemetryReporter, cspArbiter, engine, tocProvider));
5959

6060
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(() => {
@@ -64,15 +64,15 @@ export function activate(context: vscode.ExtensionContext) {
6464

6565
function registerMarkdownLanguageFeatures(
6666
parser: IMdParser,
67-
workspaceContents: MdWorkspaceContents,
67+
workspace: IMdWorkspace,
6868
commandManager: CommandManager,
6969
tocProvider: MdTableOfContentsProvider,
7070
logger: ILogger,
7171
): vscode.Disposable {
7272
const selector: vscode.DocumentSelector = { language: 'markdown', scheme: '*' };
7373

74-
const linkProvider = new MdLinkProvider(parser, workspaceContents, logger);
75-
const referencesProvider = new MdReferencesProvider(parser, workspaceContents, tocProvider, logger);
74+
const linkProvider = new MdLinkProvider(parser, workspace, logger);
75+
const referencesProvider = new MdReferencesProvider(parser, workspace, tocProvider, logger);
7676
const symbolProvider = new MdDocumentSymbolProvider(tocProvider, logger);
7777

7878
return vscode.Disposable.from(
@@ -81,7 +81,7 @@ function registerMarkdownLanguageFeatures(
8181

8282
// Language features
8383
registerDefinitionSupport(selector, referencesProvider),
84-
registerDiagnosticSupport(selector, workspaceContents, linkProvider, commandManager, referencesProvider, tocProvider, logger),
84+
registerDiagnosticSupport(selector, workspace, linkProvider, commandManager, referencesProvider, tocProvider, logger),
8585
registerDocumentLinkSupport(selector, linkProvider),
8686
registerDocumentSymbolSupport(selector, tocProvider, logger),
8787
registerDropIntoEditorSupport(selector),
@@ -90,9 +90,9 @@ function registerMarkdownLanguageFeatures(
9090
registerPasteSupport(selector),
9191
registerPathCompletionSupport(selector, parser, linkProvider),
9292
registerReferencesSupport(selector, referencesProvider),
93-
registerRenameSupport(selector, workspaceContents, referencesProvider, parser.slugifier),
93+
registerRenameSupport(selector, workspace, referencesProvider, parser.slugifier),
9494
registerSmartSelectSupport(selector, parser, tocProvider),
95-
registerWorkspaceSymbolSupport(workspaceContents, symbolProvider),
95+
registerWorkspaceSymbolSupport(workspace, symbolProvider),
9696
);
9797
}
9898

extensions/markdown-language-features/src/languageFeatures/definitions.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55
import * as vscode from 'vscode';
6-
import { SkinnyTextDocument } from '../workspaceContents';
6+
import { ITextDocument } from '../types/textDocument';
77
import { MdReferencesProvider } from './references';
88

99
export class MdVsCodeDefinitionProvider implements vscode.DefinitionProvider {
@@ -12,7 +12,7 @@ export class MdVsCodeDefinitionProvider implements vscode.DefinitionProvider {
1212
private readonly referencesProvider: MdReferencesProvider,
1313
) { }
1414

15-
async provideDefinition(document: SkinnyTextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.Definition | undefined> {
15+
async provideDefinition(document: ITextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.Definition | undefined> {
1616
const allRefs = await this.referencesProvider.getReferencesAtPosition(document, position, token);
1717

1818
return allRefs.find(ref => ref.kind === 'link' && ref.isDefinition)?.location;

extensions/markdown-language-features/src/languageFeatures/diagnostics.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ import * as nls from 'vscode-nls';
99
import { CommandManager } from '../commandManager';
1010
import { ILogger } from '../logging';
1111
import { MdTableOfContentsProvider } from '../tableOfContents';
12+
import { ITextDocument } from '../types/textDocument';
1213
import { Delayer } from '../util/async';
1314
import { noopToken } from '../util/cancellation';
1415
import { Disposable } from '../util/dispose';
1516
import { isMarkdownFile, looksLikeMarkdownPath } from '../util/file';
1617
import { Limiter } from '../util/limiter';
1718
import { ResourceMap } from '../util/resourceMap';
1819
import { MdTableOfContentsWatcher } from '../util/tableOfContentsWatcher';
19-
import { MdWorkspaceContents, SkinnyTextDocument } from '../workspaceContents';
20+
import { IMdWorkspace } from '../workspace';
2021
import { InternalHref, LinkDefinitionSet, MdLink, MdLinkProvider, MdLinkSource } from './documentLinks';
2122
import { MdReferencesProvider, tryResolveLinkPath } from './references';
2223

@@ -305,7 +306,7 @@ export class DiagnosticManager extends Disposable {
305306
public readonly ready: Promise<void>;
306307

307308
constructor(
308-
private readonly workspaceContents: MdWorkspaceContents,
309+
private readonly workspace: IMdWorkspace,
309310
private readonly computer: DiagnosticComputer,
310311
private readonly configuration: DiagnosticConfiguration,
311312
private readonly reporter: DiagnosticReporter,
@@ -322,17 +323,17 @@ export class DiagnosticManager extends Disposable {
322323
this.rebuild();
323324
}));
324325

325-
this._register(workspaceContents.onDidCreateMarkdownDocument(doc => {
326+
this._register(workspace.onDidCreateMarkdownDocument(doc => {
326327
this.triggerDiagnostics(doc.uri);
327328
// Links in other files may have become valid
328329
this.triggerForReferencingFiles(doc.uri);
329330
}));
330331

331-
this._register(workspaceContents.onDidChangeMarkdownDocument(doc => {
332+
this._register(workspace.onDidChangeMarkdownDocument(doc => {
332333
this.triggerDiagnostics(doc.uri);
333334
}));
334335

335-
this._register(workspaceContents.onDidDeleteMarkdownDocument(uri => {
336+
this._register(workspace.onDidDeleteMarkdownDocument(uri => {
336337
this.triggerForReferencingFiles(uri);
337338
}));
338339

@@ -352,7 +353,7 @@ export class DiagnosticManager extends Disposable {
352353
}
353354
}));
354355

355-
this.tableOfContentsWatcher = this._register(new MdTableOfContentsWatcher(workspaceContents, tocProvider, delay / 2));
356+
this.tableOfContentsWatcher = this._register(new MdTableOfContentsWatcher(workspace, tocProvider, delay / 2));
356357
this._register(this.tableOfContentsWatcher.onTocChanged(e => {
357358
return this.triggerForReferencingFiles(e.uri);
358359
}));
@@ -379,7 +380,7 @@ export class DiagnosticManager extends Disposable {
379380
this.pendingDiagnostics.clear();
380381
}
381382

382-
private async recomputeDiagnosticState(doc: SkinnyTextDocument, token: vscode.CancellationToken): Promise<{ diagnostics: readonly vscode.Diagnostic[]; links: readonly MdLink[]; config: DiagnosticOptions }> {
383+
private async recomputeDiagnosticState(doc: ITextDocument, token: vscode.CancellationToken): Promise<{ diagnostics: readonly vscode.Diagnostic[]; links: readonly MdLink[]; config: DiagnosticOptions }> {
383384
this.logger.verbose('DiagnosticManager', `recomputeDiagnosticState - ${doc.uri}`);
384385

385386
const config = this.configuration.getOptions(doc.uri);
@@ -394,7 +395,7 @@ export class DiagnosticManager extends Disposable {
394395
this.pendingDiagnostics.clear();
395396

396397
await Promise.all(pending.map(async resource => {
397-
const doc = await this.workspaceContents.getOrLoadMarkdownDocument(resource);
398+
const doc = await this.workspace.getOrLoadMarkdownDocument(resource);
398399
if (doc) {
399400
await this.inFlightDiagnostics.trigger(doc.uri, async (token) => {
400401
if (this.reporter.areDiagnosticsEnabled(doc.uri)) {
@@ -419,7 +420,7 @@ export class DiagnosticManager extends Disposable {
419420
(async () => {
420421
// TODO: This pulls in all md files in the workspace. Instead we only care about opened text documents.
421422
// Need a new way to handle that.
422-
const allDocs = await this.workspaceContents.getAllMarkdownDocuments();
423+
const allDocs = await this.workspace.getAllMarkdownDocuments();
423424
await Promise.all(Array.from(allDocs, doc => this.triggerDiagnostics(doc.uri)));
424425
})()
425426
);
@@ -475,12 +476,12 @@ class FileLinkMap {
475476
export class DiagnosticComputer {
476477

477478
constructor(
478-
private readonly workspaceContents: MdWorkspaceContents,
479+
private readonly workspace: IMdWorkspace,
479480
private readonly linkProvider: MdLinkProvider,
480481
private readonly tocProvider: MdTableOfContentsProvider,
481482
) { }
482483

483-
public async getDiagnostics(doc: SkinnyTextDocument, options: DiagnosticOptions, token: vscode.CancellationToken): Promise<{ readonly diagnostics: vscode.Diagnostic[]; readonly links: readonly MdLink[] }> {
484+
public async getDiagnostics(doc: ITextDocument, options: DiagnosticOptions, token: vscode.CancellationToken): Promise<{ readonly diagnostics: vscode.Diagnostic[]; readonly links: readonly MdLink[] }> {
484485
const { links, definitions } = await this.linkProvider.getLinks(doc);
485486
if (token.isCancellationRequested || !options.enabled) {
486487
return { links, diagnostics: [] };
@@ -496,7 +497,7 @@ export class DiagnosticComputer {
496497
};
497498
}
498499

499-
private async validateFragmentLinks(doc: SkinnyTextDocument, options: DiagnosticOptions, links: readonly MdLink[], token: vscode.CancellationToken): Promise<vscode.Diagnostic[]> {
500+
private async validateFragmentLinks(doc: ITextDocument, options: DiagnosticOptions, links: readonly MdLink[], token: vscode.CancellationToken): Promise<vscode.Diagnostic[]> {
500501
const severity = toSeverity(options.validateFragmentLinks);
501502
if (typeof severity === 'undefined') {
502503
return [];
@@ -567,7 +568,7 @@ export class DiagnosticComputer {
567568
return;
568569
}
569570

570-
const resolvedHrefPath = await tryResolveLinkPath(path, this.workspaceContents);
571+
const resolvedHrefPath = await tryResolveLinkPath(path, this.workspace);
571572
if (!resolvedHrefPath) {
572573
const msg = localize('invalidPathLink', 'File does not exist at path: {0}', path.fsPath);
573574
for (const link of links) {
@@ -595,7 +596,7 @@ export class DiagnosticComputer {
595596
}
596597

597598
private isMarkdownPath(resolvedHrefPath: vscode.Uri) {
598-
return this.workspaceContents.hasMarkdownDocument(resolvedHrefPath) || looksLikeMarkdownPath(resolvedHrefPath);
599+
return this.workspace.hasMarkdownDocument(resolvedHrefPath) || looksLikeMarkdownPath(resolvedHrefPath);
599600
}
600601

601602
private isIgnoredLink(options: DiagnosticOptions, link: string): boolean {
@@ -652,7 +653,7 @@ class AddToIgnoreLinksQuickFixProvider implements vscode.CodeActionProvider {
652653

653654
export function registerDiagnosticSupport(
654655
selector: vscode.DocumentSelector,
655-
workspaceContents: MdWorkspaceContents,
656+
workspace: IMdWorkspace,
656657
linkProvider: MdLinkProvider,
657658
commandManager: CommandManager,
658659
referenceProvider: MdReferencesProvider,
@@ -661,8 +662,8 @@ export function registerDiagnosticSupport(
661662
): vscode.Disposable {
662663
const configuration = new VSCodeDiagnosticConfiguration();
663664
const manager = new DiagnosticManager(
664-
workspaceContents,
665-
new DiagnosticComputer(workspaceContents, linkProvider, tocProvider),
665+
workspace,
666+
new DiagnosticComputer(workspace, linkProvider, tocProvider),
666667
configuration,
667668
new DiagnosticCollectionReporter(),
668669
referenceProvider,

extensions/markdown-language-features/src/languageFeatures/documentLinks.ts

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import * as vscode from 'vscode';
77
import * as nls from 'vscode-nls';
88
import * as uri from 'vscode-uri';
99
import { OpenDocumentLinkCommand } from '../commands/openDocumentLink';
10+
import { ILogger } from '../logging';
1011
import { IMdParser } from '../markdownEngine';
12+
import { ITextDocument } from '../types/textDocument';
1113
import { coalesce } from '../util/arrays';
1214
import { noopToken } from '../util/cancellation';
1315
import { Disposable } from '../util/dispose';
1416
import { getUriForLinkWithKnownExternalScheme, isOfScheme, Schemes } from '../util/schemes';
15-
import { MdWorkspaceContents, SkinnyTextDocument } from '../workspaceContents';
1617
import { MdDocumentInfoCache } from '../util/workspaceCache';
17-
import { ILogger } from '../logging';
18+
import { IMdWorkspace } from '../workspace';
1819

1920
const localize = nls.loadMessageBundle();
2021

@@ -38,7 +39,7 @@ export type LinkHref = ExternalHref | InternalHref | ReferenceHref;
3839

3940

4041
function parseLink(
41-
document: SkinnyTextDocument,
42+
document: ITextDocument,
4243
link: string,
4344
): ExternalHref | InternalHref | undefined {
4445
const cleanLink = stripAngleBrackets(link);
@@ -91,7 +92,7 @@ function parseLink(
9192
};
9293
}
9394

94-
function getWorkspaceFolder(document: SkinnyTextDocument) {
95+
function getWorkspaceFolder(document: ITextDocument) {
9596
return vscode.workspace.getWorkspaceFolder(document.uri)?.uri
9697
|| vscode.workspace.workspaceFolders?.[0]?.uri;
9798
}
@@ -131,7 +132,7 @@ export interface MdLinkDefinition {
131132
export type MdLink = MdInlineLink | MdLinkDefinition;
132133

133134
function extractDocumentLink(
134-
document: SkinnyTextDocument,
135+
document: ITextDocument,
135136
pre: string,
136137
rawLink: string,
137138
matchIndex: number | undefined
@@ -170,7 +171,7 @@ function getFragmentRange(text: string, start: vscode.Position, end: vscode.Posi
170171
return new vscode.Range(start.translate({ characterDelta: index + 1 }), end);
171172
}
172173

173-
function getLinkSourceFragmentInfo(document: SkinnyTextDocument, link: string, linkStart: vscode.Position, linkEnd: vscode.Position): { fragmentRange: vscode.Range | undefined; pathText: string } {
174+
function getLinkSourceFragmentInfo(document: ITextDocument, link: string, linkStart: vscode.Position, linkEnd: vscode.Position): { fragmentRange: vscode.Range | undefined; pathText: string } {
174175
const fragmentRange = getFragmentRange(link, linkStart, linkEnd);
175176
return {
176177
pathText: document.getText(new vscode.Range(linkStart, fragmentRange ? fragmentRange.start.translate(0, -1) : linkEnd)),
@@ -234,7 +235,7 @@ const definitionPattern = /^([\t ]*\[(?!\^)((?:\\\]|[^\]])+)\]:\s*)([^<]\S*|<[^>
234235
const inlineCodePattern = /(?:^|[^`])(`+)(?:.+?|.*?(?:(?:\r?\n).+?)*?)(?:\r?\n)?\1(?:$|[^`])/gm;
235236

236237
class NoLinkRanges {
237-
public static async compute(tokenizer: IMdParser, document: SkinnyTextDocument): Promise<NoLinkRanges> {
238+
public static async compute(tokenizer: IMdParser, document: ITextDocument): Promise<NoLinkRanges> {
238239
const tokens = await tokenizer.tokenize(document);
239240
const multiline = tokens.filter(t => (t.type === 'code_block' || t.type === 'fence' || t.type === 'html_block') && !!t.map).map(t => t.map) as [number, number][];
240241

@@ -274,7 +275,7 @@ export class MdLinkComputer {
274275
private readonly tokenizer: IMdParser,
275276
) { }
276277

277-
public async getAllLinks(document: SkinnyTextDocument, token: vscode.CancellationToken): Promise<MdLink[]> {
278+
public async getAllLinks(document: ITextDocument, token: vscode.CancellationToken): Promise<MdLink[]> {
278279
const noLinkRanges = await NoLinkRanges.compute(this.tokenizer, document);
279280
if (token.isCancellationRequested) {
280281
return [];
@@ -288,7 +289,7 @@ export class MdLinkComputer {
288289
]);
289290
}
290291

291-
private *getInlineLinks(document: SkinnyTextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLink> {
292+
private *getInlineLinks(document: ITextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLink> {
292293
const text = document.getText();
293294
for (const match of text.matchAll(linkPattern)) {
294295
const matchLinkData = extractDocumentLink(document, match[1], match[2], match.index);
@@ -306,7 +307,7 @@ export class MdLinkComputer {
306307
}
307308
}
308309

309-
private * getAutoLinks(document: SkinnyTextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLink> {
310+
private * getAutoLinks(document: ITextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLink> {
310311
const text = document.getText();
311312

312313
for (const match of text.matchAll(autoLinkPattern)) {
@@ -334,7 +335,7 @@ export class MdLinkComputer {
334335
}
335336
}
336337

337-
private *getReferenceLinks(document: SkinnyTextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLink> {
338+
private *getReferenceLinks(document: ITextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLink> {
338339
const text = document.getText();
339340
for (const match of text.matchAll(referenceLinkPattern)) {
340341
let linkStart: vscode.Position;
@@ -382,7 +383,7 @@ export class MdLinkComputer {
382383
}
383384
}
384385

385-
private *getLinkDefinitions(document: SkinnyTextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLinkDefinition> {
386+
private *getLinkDefinitions(document: ITextDocument, noLinkRanges: NoLinkRanges): Iterable<MdLinkDefinition> {
386387
const text = document.getText();
387388
for (const match of text.matchAll(definitionPattern)) {
388389
const pre = match[1];
@@ -443,12 +444,12 @@ export class MdLinkProvider extends Disposable {
443444

444445
constructor(
445446
tokenizer: IMdParser,
446-
workspaceContents: MdWorkspaceContents,
447+
workspace: IMdWorkspace,
447448
logger: ILogger,
448449
) {
449450
super();
450451
this.linkComputer = new MdLinkComputer(tokenizer);
451-
this._linkCache = this._register(new MdDocumentInfoCache(workspaceContents, async doc => {
452+
this._linkCache = this._register(new MdDocumentInfoCache(workspace, async doc => {
452453
logger.verbose('LinkProvider', `compute - ${doc.uri}`);
453454

454455
const links = await this.linkComputer.getAllLinks(doc, noopToken);
@@ -459,7 +460,7 @@ export class MdLinkProvider extends Disposable {
459460
}));
460461
}
461462

462-
public async getLinks(document: SkinnyTextDocument): Promise<MdDocumentLinks> {
463+
public async getLinks(document: ITextDocument): Promise<MdDocumentLinks> {
463464
return this._linkCache.getForDocument(document);
464465
}
465466
}
@@ -491,7 +492,7 @@ export class MdVsCodeLinkProvider implements vscode.DocumentLinkProvider {
491492
) { }
492493

493494
public async provideDocumentLinks(
494-
document: SkinnyTextDocument,
495+
document: ITextDocument,
495496
token: vscode.CancellationToken
496497
): Promise<vscode.DocumentLink[]> {
497498
const { links, definitions } = await this._linkProvider.getLinks(document);

0 commit comments

Comments
 (0)