Add skipPaths option for markdown link validation (#149859)

The new `markdown.experimental.validate.fileLinks.skipPaths` setting lets you specify a list of paths (as globs) that should not be validation

This is useful since markdown is used in a range of environments, and sometimes you may need to link to paths that don't exist on disk but will exist on deployment

A few other changes here:

- Adds a quick fix that adds paths to `skipPaths`
- Rename existing settings to use the `.enabled` prefix
This commit is contained in:
Matt Bierner
2022-05-18 14:37:08 -07:00
committed by GitHub
parent fd3a84fdfc
commit daf0d5e551
7 changed files with 194 additions and 20 deletions

View File

@@ -93,7 +93,16 @@ function getWorkspaceFolder(document: SkinnyTextDocument) {
}
export interface MdLinkSource {
/**
* The original text of the link destination in code.
*/
readonly text: string;
/**
* The original text of just the link's path in code.
*/
readonly pathText: string;
readonly resource: vscode.Uri;
readonly hrefRange: vscode.Range;
readonly fragmentRange: vscode.Range | undefined;
@@ -138,7 +147,7 @@ function extractDocumentLink(
text: link,
resource: document.uri,
hrefRange: new vscode.Range(linkStart, linkEnd),
fragmentRange: getFragmentRange(link, linkStart, linkEnd),
...getLinkSourceFragmentInfo(document, link, linkStart, linkEnd),
}
};
} catch {
@@ -154,6 +163,14 @@ function getFragmentRange(text: string, start: vscode.Position, end: vscode.Posi
return new vscode.Range(start.translate({ characterDelta: index + 1 }), end);
}
function getLinkSourceFragmentInfo(document: SkinnyTextDocument, link: string, linkStart: vscode.Position, linkEnd: vscode.Position): { fragmentRange: vscode.Range | undefined; pathText: string } {
const fragmentRange = getFragmentRange(link, linkStart, linkEnd);
return {
pathText: document.getText(new vscode.Range(linkStart, fragmentRange ? fragmentRange.start.translate(0, -1) : linkEnd)),
fragmentRange,
};
}
const angleBracketLinkRe = /^<(.*)>$/;
/**
@@ -314,7 +331,7 @@ export class MdLinkProvider implements vscode.DocumentLinkProvider {
text: link,
resource: document.uri,
hrefRange: new vscode.Range(linkStart, linkEnd),
fragmentRange: getFragmentRange(link, linkStart, linkEnd),
...getLinkSourceFragmentInfo(document, link, linkStart, linkEnd),
}
};
}
@@ -350,6 +367,7 @@ export class MdLinkProvider implements vscode.DocumentLinkProvider {
kind: 'link',
source: {
text: reference,
pathText: reference,
resource: document.uri,
hrefRange,
fragmentRange: undefined,
@@ -402,7 +420,7 @@ export class MdLinkProvider implements vscode.DocumentLinkProvider {
text: link,
resource: document.uri,
hrefRange,
fragmentRange: getFragmentRange(link, linkStart, linkEnd),
...getLinkSourceFragmentInfo(document, link, linkStart, linkEnd),
},
ref: { text: reference, range: refRange },
href: target,