typescript-language-server 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +72 -6
- package/lib/cli.js +4 -8
- package/lib/cli.js.map +1 -1
- package/lib/commands.d.ts +1 -0
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +1 -0
- package/lib/commands.js.map +1 -1
- package/lib/completion.d.ts +3 -2
- package/lib/completion.d.ts.map +1 -1
- package/lib/completion.js +11 -9
- package/lib/completion.js.map +1 -1
- package/lib/configuration-manager.d.ts +11 -2
- package/lib/configuration-manager.d.ts.map +1 -1
- package/lib/configuration-manager.js +15 -4
- package/lib/configuration-manager.js.map +1 -1
- package/lib/document.d.ts +4 -1
- package/lib/document.d.ts.map +1 -1
- package/lib/document.js +9 -0
- package/lib/document.js.map +1 -1
- package/lib/hover.d.ts +2 -1
- package/lib/hover.d.ts.map +1 -1
- package/lib/hover.js +13 -15
- package/lib/hover.js.map +1 -1
- package/lib/lsp-connection.d.ts +2 -2
- package/lib/lsp-connection.d.ts.map +1 -1
- package/lib/lsp-connection.js +2 -2
- package/lib/lsp-connection.js.map +1 -1
- package/lib/lsp-server.d.ts +2 -1
- package/lib/lsp-server.d.ts.map +1 -1
- package/lib/lsp-server.js +68 -53
- package/lib/lsp-server.js.map +1 -1
- package/lib/protocol-translation.d.ts +0 -8
- package/lib/protocol-translation.d.ts.map +1 -1
- package/lib/protocol-translation.js +0 -69
- package/lib/protocol-translation.js.map +1 -1
- package/lib/test-utils.js +1 -1
- package/lib/test-utils.js.map +1 -1
- package/lib/ts-protocol.d.ts +14 -1
- package/lib/ts-protocol.d.ts.map +1 -1
- package/lib/tsServer/requests.d.ts +1 -0
- package/lib/tsServer/requests.d.ts.map +1 -1
- package/lib/tsServer/serverProcess.js +1 -2
- package/lib/tsServer/serverProcess.js.map +1 -1
- package/lib/tsServer/spawner.js +2 -2
- package/lib/tsServer/spawner.js.map +1 -1
- package/lib/tsServer/versionProvider.d.ts +3 -7
- package/lib/tsServer/versionProvider.d.ts.map +1 -1
- package/lib/tsServer/versionProvider.js +19 -21
- package/lib/tsServer/versionProvider.js.map +1 -1
- package/lib/tsp-client.d.ts.map +1 -1
- package/lib/tsp-client.js +8 -11
- package/lib/tsp-client.js.map +1 -1
- package/lib/tsp-client.spec.js +1 -1
- package/lib/tsp-client.spec.js.map +1 -1
- package/lib/utils/MarkdownString.d.ts +15 -0
- package/lib/utils/MarkdownString.d.ts.map +1 -0
- package/lib/utils/MarkdownString.js +45 -0
- package/lib/utils/MarkdownString.js.map +1 -0
- package/lib/utils/configuration.d.ts +2 -1
- package/lib/utils/configuration.d.ts.map +1 -1
- package/lib/utils/configuration.js +4 -1
- package/lib/utils/configuration.js.map +1 -1
- package/lib/utils/previewer.d.ts +15 -0
- package/lib/utils/previewer.d.ts.map +1 -0
- package/lib/utils/previewer.js +185 -0
- package/lib/utils/previewer.js.map +1 -0
- package/lib/utils/previewer.spec.d.ts +2 -0
- package/lib/utils/previewer.spec.d.ts.map +1 -0
- package/lib/utils/previewer.spec.js +123 -0
- package/lib/utils/previewer.spec.js.map +1 -0
- package/lib/utils/tsconfig.d.ts +4 -0
- package/lib/utils/tsconfig.d.ts.map +1 -0
- package/lib/utils/tsconfig.js +40 -0
- package/lib/utils/tsconfig.js.map +1 -0
- package/package.json +7 -7
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (C) 2022 TypeFox and others.
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*/
|
|
11
|
+
export class MarkdownString {
|
|
12
|
+
constructor(value = '') {
|
|
13
|
+
this.value = value;
|
|
14
|
+
}
|
|
15
|
+
appendText(value, newlineStyle = 0 /* MarkdownStringTextNewlineStyle.Paragraph */) {
|
|
16
|
+
this.value += escapeMarkdownSyntaxTokens(value)
|
|
17
|
+
.replace(/([ \t]+)/g, (_match, g1) => ' '.repeat(g1.length))
|
|
18
|
+
.replace(/>/gm, '\\>')
|
|
19
|
+
.replace(/\n/g, newlineStyle === 1 /* MarkdownStringTextNewlineStyle.Break */ ? '\\\n' : '\n\n');
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
appendMarkdown(value) {
|
|
23
|
+
this.value += value;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
appendCodeblock(langId, code) {
|
|
27
|
+
this.value += '\n```';
|
|
28
|
+
this.value += langId;
|
|
29
|
+
this.value += '\n';
|
|
30
|
+
this.value += code;
|
|
31
|
+
this.value += '\n```\n';
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
toMarkupContent() {
|
|
35
|
+
return {
|
|
36
|
+
kind: 'markdown',
|
|
37
|
+
value: this.value,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function escapeMarkdownSyntaxTokens(text) {
|
|
42
|
+
// escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
|
|
43
|
+
return text.replace(/[\\`*_{}[\]()#+\-!]/g, '\\$&');
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=MarkdownString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownString.js","sourceRoot":"","sources":["../../src/utils/MarkdownString.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;;;;GAKG;AASH,MAAM,OAAO,cAAc;IACvB,YAAmB,QAAQ,EAAE;QAAV,UAAK,GAAL,KAAK,CAAK;IAAG,CAAC;IAEjC,UAAU,CAAC,KAAa,EAAE,+DAAuF;QAC7G,IAAI,CAAC,KAAK,IAAI,0BAA0B,CAAC,KAAK,CAAC;aAC1C,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;aAChE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;aACrB,OAAO,CAAC,KAAK,EAAE,YAAY,iDAAyC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAE7F,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,cAAc,CAAC,KAAa;QACxB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,eAAe,CAAC,MAAc,EAAE,IAAY;QACxC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC;QACtB,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,eAAe;QACX,OAAO;YACH,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC;IACN,CAAC;CACJ;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACnD,8FAA8F;IAC9F,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/utils/configuration.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,oBAAY,gBAAgB;IACxB,GAAG,IAAA;IACH,MAAM,IAAA;IACN,KAAK,IAAA;IACL,OAAO,IAAA;CACV;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/utils/configuration.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,oBAAY,gBAAgB;IACxB,GAAG,IAAA;IACH,MAAM,IAAA;IACN,KAAK,IAAA;IACL,WAAW,IAAA;IACX,OAAO,IAAA;CACV;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,SAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAc1D;IAED,SAAgB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAYxD;CACJ;AAED,MAAM,WAAW,8BAA8B;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,EAAE,gBAAgB,CAAC;IAChD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAClC"}
|
|
@@ -9,7 +9,8 @@ export var TsServerLogLevel;
|
|
|
9
9
|
TsServerLogLevel[TsServerLogLevel["Off"] = 0] = "Off";
|
|
10
10
|
TsServerLogLevel[TsServerLogLevel["Normal"] = 1] = "Normal";
|
|
11
11
|
TsServerLogLevel[TsServerLogLevel["Terse"] = 2] = "Terse";
|
|
12
|
-
TsServerLogLevel[TsServerLogLevel["
|
|
12
|
+
TsServerLogLevel[TsServerLogLevel["RequestTime"] = 3] = "RequestTime";
|
|
13
|
+
TsServerLogLevel[TsServerLogLevel["Verbose"] = 4] = "Verbose";
|
|
13
14
|
})(TsServerLogLevel = TsServerLogLevel || (TsServerLogLevel = {}));
|
|
14
15
|
(function (TsServerLogLevel) {
|
|
15
16
|
function fromString(value) {
|
|
@@ -18,6 +19,8 @@ export var TsServerLogLevel;
|
|
|
18
19
|
return TsServerLogLevel.Normal;
|
|
19
20
|
case 'terse':
|
|
20
21
|
return TsServerLogLevel.Terse;
|
|
22
|
+
case 'requestTime':
|
|
23
|
+
return TsServerLogLevel.RequestTime;
|
|
21
24
|
case 'verbose':
|
|
22
25
|
return TsServerLogLevel.Verbose;
|
|
23
26
|
case 'off':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/utils/configuration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/utils/configuration.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IACxB,qDAAG,CAAA;IACH,2DAAM,CAAA;IACN,yDAAK,CAAA;IACL,qEAAW,CAAA;IACX,6DAAO,CAAA;AACX,CAAC,EANW,gBAAgB,GAAhB,gBAAgB,KAAhB,gBAAgB,QAM3B;AAED,WAAiB,gBAAgB;IAC7B,SAAgB,UAAU,CAAC,KAAa;QACpC,QAAQ,KAAK,EAAE,WAAW,EAAE,EAAE;YAC1B,KAAK,QAAQ;gBACT,OAAO,gBAAgB,CAAC,MAAM,CAAC;YACnC,KAAK,OAAO;gBACR,OAAO,gBAAgB,CAAC,KAAK,CAAC;YAClC,KAAK,aAAa;gBACd,OAAO,gBAAgB,CAAC,WAAW,CAAC;YACxC,KAAK,SAAS;gBACV,OAAO,gBAAgB,CAAC,OAAO,CAAC;YACpC,KAAK,KAAK,CAAC;YACX;gBACI,OAAO,gBAAgB,CAAC,GAAG,CAAC;SACnC;IACL,CAAC;IAde,2BAAU,aAczB,CAAA;IAED,SAAgB,QAAQ,CAAC,KAAuB;QAC5C,QAAQ,KAAK,EAAE;YACX,KAAK,gBAAgB,CAAC,MAAM;gBACxB,OAAO,QAAQ,CAAC;YACpB,KAAK,gBAAgB,CAAC,KAAK;gBACvB,OAAO,OAAO,CAAC;YACnB,KAAK,gBAAgB,CAAC,OAAO;gBACzB,OAAO,SAAS,CAAC;YACrB,KAAK,gBAAgB,CAAC,GAAG,CAAC;YAC1B;gBACI,OAAO,KAAK,CAAC;SACpB;IACL,CAAC;IAZe,yBAAQ,WAYvB,CAAA;AACL,CAAC,EA9BgB,gBAAgB,GAAhB,gBAAgB,KAAhB,gBAAgB,QA8BhC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import vscodeUri from 'vscode-uri';
|
|
2
|
+
import * as lsp from 'vscode-languageserver';
|
|
3
|
+
import type tsp from 'typescript/lib/protocol.d.js';
|
|
4
|
+
import { MarkdownString } from './MarkdownString.js';
|
|
5
|
+
export interface IFilePathToResourceConverter {
|
|
6
|
+
/**
|
|
7
|
+
* Convert a typescript filepath to an URI resource.
|
|
8
|
+
*/
|
|
9
|
+
toResource(filepath: string): vscodeUri.URI;
|
|
10
|
+
}
|
|
11
|
+
export declare function plainWithLinks(parts: readonly tsp.SymbolDisplayPart[] | string, filePathConverter: IFilePathToResourceConverter): string;
|
|
12
|
+
export declare function tagsMarkdownPreview(tags: readonly tsp.JSDocTagInfo[], filePathConverter: IFilePathToResourceConverter): string;
|
|
13
|
+
export declare function markdownDocumentation(documentation: tsp.SymbolDisplayPart[] | string | undefined, tags: tsp.JSDocTagInfo[] | undefined, filePathConverter: IFilePathToResourceConverter): lsp.MarkupContent | undefined;
|
|
14
|
+
export declare function addMarkdownDocumentation(out: MarkdownString, documentation: string | tsp.SymbolDisplayPart[] | undefined, tags: tsp.JSDocTagInfo[] | undefined, converter: IFilePathToResourceConverter): MarkdownString;
|
|
15
|
+
//# sourceMappingURL=previewer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewer.d.ts","sourceRoot":"","sources":["../../src/utils/previewer.ts"],"names":[],"mappings":"AAWA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,uBAAuB,CAAC;AAC7C,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;CAC/C;AA+FD,wBAAgB,cAAc,CAC1B,KAAK,EAAE,SAAS,GAAG,CAAC,iBAAiB,EAAE,GAAG,MAAM,EAChD,iBAAiB,EAAE,4BAA4B,GAChD,MAAM,CAER;AA6ED,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,SAAS,GAAG,CAAC,YAAY,EAAE,EACjC,iBAAiB,EAAE,4BAA4B,GAChD,MAAM,CAER;AAED,wBAAgB,qBAAqB,CACjC,aAAa,EAAE,GAAG,CAAC,iBAAiB,EAAE,GAAG,MAAM,GAAG,SAAS,EAC3D,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,EACpC,iBAAiB,EAAE,4BAA4B,GAChD,GAAG,CAAC,aAAa,GAAG,SAAS,CAI/B;AAED,wBAAgB,wBAAwB,CACpC,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,iBAAiB,EAAE,GAAG,SAAS,EAC3D,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE,GAAG,SAAS,EACpC,SAAS,EAAE,4BAA4B,GACxC,cAAc,CAWhB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (C) 2022 TypeFox and others.
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*/
|
|
11
|
+
import { MarkdownString } from './MarkdownString.js';
|
|
12
|
+
function replaceLinks(text) {
|
|
13
|
+
return text
|
|
14
|
+
// Http(s) links
|
|
15
|
+
.replace(/\{@(link|linkplain|linkcode) (https?:\/\/[^ |}]+?)(?:[| ]([^{}\n]+?))?\}/gi, (_, tag, link, text) => {
|
|
16
|
+
switch (tag) {
|
|
17
|
+
case 'linkcode':
|
|
18
|
+
return `[\`${text ? text.trim() : link}\`](${link})`;
|
|
19
|
+
default:
|
|
20
|
+
return `[${text ? text.trim() : link}](${link})`;
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function processInlineTags(text) {
|
|
25
|
+
return replaceLinks(text);
|
|
26
|
+
}
|
|
27
|
+
function getTagBodyText(tag, filePathConverter) {
|
|
28
|
+
if (!tag.text) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
// Convert to markdown code block if it does not already contain one
|
|
32
|
+
function makeCodeblock(text) {
|
|
33
|
+
if (/^\s*[~`]{3}/m.test(text)) {
|
|
34
|
+
return text;
|
|
35
|
+
}
|
|
36
|
+
return '```\n' + text + '\n```';
|
|
37
|
+
}
|
|
38
|
+
const text = convertLinkTags(tag.text, filePathConverter);
|
|
39
|
+
switch (tag.name) {
|
|
40
|
+
case 'example': {
|
|
41
|
+
// check for caption tags, fix for #79704
|
|
42
|
+
const captionTagMatches = text.match(/<caption>(.*?)<\/caption>\s*(\r\n|\n)/);
|
|
43
|
+
if (captionTagMatches && captionTagMatches.index === 0) {
|
|
44
|
+
return captionTagMatches[1] + '\n' + makeCodeblock(text.substring(captionTagMatches[0].length));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
return makeCodeblock(text);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
case 'author': {
|
|
51
|
+
// fix obsucated email address, #80898
|
|
52
|
+
const emailMatch = text.match(/(.+)\s<([-.\w]+@[-.\w]+)>/);
|
|
53
|
+
if (emailMatch === null) {
|
|
54
|
+
return text;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return `${emailMatch[1]} ${emailMatch[2]}`;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
case 'default':
|
|
61
|
+
return makeCodeblock(text);
|
|
62
|
+
}
|
|
63
|
+
return processInlineTags(text);
|
|
64
|
+
}
|
|
65
|
+
function getTagDocumentation(tag, filePathConverter) {
|
|
66
|
+
switch (tag.name) {
|
|
67
|
+
case 'augments':
|
|
68
|
+
case 'extends':
|
|
69
|
+
case 'param':
|
|
70
|
+
case 'template': {
|
|
71
|
+
const body = convertLinkTags(tag.text, filePathConverter).split(/^(\S+)\s*-?\s*/);
|
|
72
|
+
if (body?.length === 3) {
|
|
73
|
+
const param = body[1];
|
|
74
|
+
const doc = body[2];
|
|
75
|
+
const label = `*@${tag.name}* \`${param}\``;
|
|
76
|
+
if (!doc) {
|
|
77
|
+
return label;
|
|
78
|
+
}
|
|
79
|
+
return label + (doc.match(/\r\n|\n/g) ? ' \n' + processInlineTags(doc) : ` \u2014 ${processInlineTags(doc)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Generic tag
|
|
84
|
+
const label = `*@${tag.name}*`;
|
|
85
|
+
const text = getTagBodyText(tag, filePathConverter);
|
|
86
|
+
if (!text) {
|
|
87
|
+
return label;
|
|
88
|
+
}
|
|
89
|
+
return label + (text.match(/\r\n|\n/g) ? ' \n' + text : ` \u2014 ${text}`);
|
|
90
|
+
}
|
|
91
|
+
export function plainWithLinks(parts, filePathConverter) {
|
|
92
|
+
return processInlineTags(convertLinkTags(parts, filePathConverter));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Convert `@link` inline tags to markdown links
|
|
96
|
+
*/
|
|
97
|
+
function convertLinkTags(parts, filePathConverter) {
|
|
98
|
+
if (!parts) {
|
|
99
|
+
return '';
|
|
100
|
+
}
|
|
101
|
+
if (typeof parts === 'string') {
|
|
102
|
+
return parts;
|
|
103
|
+
}
|
|
104
|
+
const out = [];
|
|
105
|
+
let currentLink;
|
|
106
|
+
for (const part of parts) {
|
|
107
|
+
switch (part.kind) {
|
|
108
|
+
case 'link':
|
|
109
|
+
if (currentLink) {
|
|
110
|
+
if (currentLink.target) {
|
|
111
|
+
const link = filePathConverter.toResource(currentLink.target.file)
|
|
112
|
+
.with({
|
|
113
|
+
fragment: `L${currentLink.target.start.line},${currentLink.target.start.offset}`,
|
|
114
|
+
});
|
|
115
|
+
const linkText = currentLink.text ? currentLink.text : escapeMarkdownSyntaxTokensForCode(currentLink.name ?? '');
|
|
116
|
+
out.push(`[${currentLink.linkcode ? '`' + linkText + '`' : linkText}](${link.toString()})`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const text = currentLink.text ?? currentLink.name;
|
|
120
|
+
if (text) {
|
|
121
|
+
if (/^https?:/.test(text)) {
|
|
122
|
+
const parts = text.split(' ');
|
|
123
|
+
if (parts.length === 1) {
|
|
124
|
+
out.push(parts[0]);
|
|
125
|
+
}
|
|
126
|
+
else if (parts.length > 1) {
|
|
127
|
+
const linkText = escapeMarkdownSyntaxTokensForCode(parts.slice(1).join(' '));
|
|
128
|
+
out.push(`[${currentLink.linkcode ? '`' + linkText + '`' : linkText}](${parts[0]})`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
out.push(escapeMarkdownSyntaxTokensForCode(text));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
currentLink = undefined;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
currentLink = {
|
|
140
|
+
linkcode: part.text === '{@linkcode ',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
case 'linkName':
|
|
145
|
+
if (currentLink) {
|
|
146
|
+
currentLink.name = part.text;
|
|
147
|
+
currentLink.target = part.target;
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
case 'linkText':
|
|
151
|
+
if (currentLink) {
|
|
152
|
+
currentLink.text = part.text;
|
|
153
|
+
}
|
|
154
|
+
break;
|
|
155
|
+
default:
|
|
156
|
+
out.push(part.text);
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return processInlineTags(out.join(''));
|
|
161
|
+
}
|
|
162
|
+
export function tagsMarkdownPreview(tags, filePathConverter) {
|
|
163
|
+
return tags.map(tag => getTagDocumentation(tag, filePathConverter)).join(' \n\n');
|
|
164
|
+
}
|
|
165
|
+
export function markdownDocumentation(documentation, tags, filePathConverter) {
|
|
166
|
+
const out = new MarkdownString();
|
|
167
|
+
addMarkdownDocumentation(out, documentation, tags, filePathConverter);
|
|
168
|
+
return out.value ? out.toMarkupContent() : undefined;
|
|
169
|
+
}
|
|
170
|
+
export function addMarkdownDocumentation(out, documentation, tags, converter) {
|
|
171
|
+
if (documentation) {
|
|
172
|
+
out.appendMarkdown(plainWithLinks(documentation, converter));
|
|
173
|
+
}
|
|
174
|
+
if (tags) {
|
|
175
|
+
const tagsPreview = tagsMarkdownPreview(tags, converter);
|
|
176
|
+
if (tagsPreview) {
|
|
177
|
+
out.appendMarkdown('\n\n' + tagsPreview);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return out;
|
|
181
|
+
}
|
|
182
|
+
function escapeMarkdownSyntaxTokensForCode(text) {
|
|
183
|
+
return text.replace(/`/g, '\\$&');
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=previewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewer.js","sourceRoot":"","sources":["../../src/utils/previewer.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;;;;GAKG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AASrD,SAAS,YAAY,CAAC,IAAY;IAC9B,OAAO,IAAI;QACP,gBAAgB;SACf,OAAO,CAAC,4EAA4E,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,IAAY,EAAE,IAAa,EAAE,EAAE;QACnI,QAAQ,GAAG,EAAE;YACT,KAAK,UAAU;gBACX,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,GAAG,CAAC;YAEzD;gBACI,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;SACxD;IACL,CAAC,CAAC,CAAC;AACX,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACnC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CACnB,GAAqB,EACrB,iBAA+C;IAE/C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QACX,OAAO,SAAS,CAAC;KACpB;IAED,oEAAoE;IACpE,SAAS,aAAa,CAAC,IAAY;QAC/B,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC;IACpC,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC1D,QAAQ,GAAG,CAAC,IAAI,EAAE;QACd,KAAK,SAAS,CAAC,CAAC;YACZ,yCAAyC;YACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC9E,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,KAAK,KAAK,CAAC,EAAE;gBACpD,OAAO,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;aACnG;iBAAM;gBACH,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;aAC9B;SACJ;QACD,KAAK,QAAQ,CAAC,CAAC;YACX,sCAAsC;YACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAE3D,IAAI,UAAU,KAAK,IAAI,EAAE;gBACrB,OAAO,IAAI,CAAC;aACf;iBAAM;gBACH,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9C;SACJ;QACD,KAAK,SAAS;YACV,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;KAClC;IAED,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CACxB,GAAqB,EACrB,iBAA+C;IAE/C,QAAQ,GAAG,CAAC,IAAI,EAAE;QACd,KAAK,UAAU,CAAC;QAChB,KAAK,SAAS,CAAC;QACf,KAAK,OAAO,CAAC;QACb,KAAK,UAAU,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAClF,IAAI,IAAI,EAAE,MAAM,KAAK,CAAC,EAAE;gBACpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,OAAO,KAAK,IAAI,CAAC;gBAC5C,IAAI,CAAC,GAAG,EAAE;oBACN,OAAO,KAAK,CAAC;iBAChB;gBACD,OAAO,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAClH;SACJ;KACJ;IAED,cAAc;IACd,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC;IAC/B,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,EAAE;QACP,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,KAAgD,EAChD,iBAA+C;IAE/C,OAAO,iBAAiB,CAAC,eAAe,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACpB,KAA4D,EAC5D,iBAA+C;IAE/C,IAAI,CAAC,KAAK,EAAE;QACR,OAAO,EAAE,CAAC;KACb;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,IAAI,WAA6G,CAAC;IAClH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACtB,QAAQ,IAAI,CAAC,IAAI,EAAE;YACf,KAAK,MAAM;gBACP,IAAI,WAAW,EAAE;oBACb,IAAI,WAAW,CAAC,MAAM,EAAE;wBACpB,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;6BAC7D,IAAI,CAAC;4BACF,QAAQ,EAAE,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE;yBACnF,CAAC,CAAC;wBAEP,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;wBACjH,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;qBAC/F;yBAAM;wBACH,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC;wBAClD,IAAI,IAAI,EAAE;4BACN,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gCACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gCAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oCACpB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iCACtB;qCAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oCACzB,MAAM,QAAQ,GAAG,iCAAiC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oCAC7E,GAAG,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iCACxF;6BACJ;iCAAM;gCACH,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,CAAC,CAAC;6BACrD;yBACJ;qBACJ;oBACD,WAAW,GAAG,SAAS,CAAC;iBAC3B;qBAAM;oBACH,WAAW,GAAG;wBACV,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,aAAa;qBACxC,CAAC;iBACL;gBACD,MAAM;YAEV,KAAK,UAAU;gBACX,IAAI,WAAW,EAAE;oBACb,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC7B,WAAW,CAAC,MAAM,GAAI,IAAiC,CAAC,MAAM,CAAC;iBAClE;gBACD,MAAM;YAEV,KAAK,UAAU;gBACX,IAAI,WAAW,EAAE;oBACb,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;iBAChC;gBACD,MAAM;YAEV;gBACI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM;SACb;KACJ;IACD,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,IAAiC,EACjC,iBAA+C;IAE/C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,qBAAqB,CACjC,aAA2D,EAC3D,IAAoC,EACpC,iBAA+C;IAE/C,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;IACjC,wBAAwB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACtE,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,wBAAwB,CACpC,GAAmB,EACnB,aAA2D,EAC3D,IAAoC,EACpC,SAAuC;IAEvC,IAAI,aAAa,EAAE;QACf,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;KAChE;IACD,IAAI,IAAI,EAAE;QACN,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,WAAW,EAAE;YACb,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;SAC5C;KACJ;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,iCAAiC,CAAC,IAAY;IACnD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewer.spec.d.ts","sourceRoot":"","sources":["../../src/utils/previewer.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (C) 2022 TypeFox and others.
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*/
|
|
11
|
+
import vscodeUri from 'vscode-uri';
|
|
12
|
+
import * as chai from 'chai';
|
|
13
|
+
import { markdownDocumentation, plainWithLinks, tagsMarkdownPreview } from './previewer.js';
|
|
14
|
+
const assert = chai.assert;
|
|
15
|
+
const noopToResource = {
|
|
16
|
+
toResource: (path) => vscodeUri.URI.file(path),
|
|
17
|
+
};
|
|
18
|
+
describe('typescript.previewer', () => {
|
|
19
|
+
it('Should ignore hyphens after a param tag', async () => {
|
|
20
|
+
assert.strictEqual(tagsMarkdownPreview([
|
|
21
|
+
{
|
|
22
|
+
name: 'param',
|
|
23
|
+
text: 'a - b',
|
|
24
|
+
},
|
|
25
|
+
], noopToResource), '*@param* `a` — b');
|
|
26
|
+
});
|
|
27
|
+
it('Should parse url jsdoc @link', async () => {
|
|
28
|
+
assert.strictEqual(markdownDocumentation('x {@link http://www.example.com/foo} y {@link https://api.jquery.com/bind/#bind-eventType-eventData-handler} z', [], noopToResource).value, 'x [http://www.example.com/foo](http://www.example.com/foo) y [https://api.jquery.com/bind/#bind-eventType-eventData-handler](https://api.jquery.com/bind/#bind-eventType-eventData-handler) z');
|
|
29
|
+
});
|
|
30
|
+
it('Should parse url jsdoc @link with text', async () => {
|
|
31
|
+
assert.strictEqual(markdownDocumentation('x {@link http://www.example.com/foo abc xyz} y {@link http://www.example.com/bar|b a z} z', [], noopToResource).value, 'x [abc xyz](http://www.example.com/foo) y [b a z](http://www.example.com/bar) z');
|
|
32
|
+
});
|
|
33
|
+
it('Should treat @linkcode jsdocs links as monospace', async () => {
|
|
34
|
+
assert.strictEqual(markdownDocumentation('x {@linkcode http://www.example.com/foo} y {@linkplain http://www.example.com/bar} z', [], noopToResource).value, 'x [`http://www.example.com/foo`](http://www.example.com/foo) y [http://www.example.com/bar](http://www.example.com/bar) z');
|
|
35
|
+
});
|
|
36
|
+
it('Should parse url jsdoc @link in param tag', async () => {
|
|
37
|
+
assert.strictEqual(tagsMarkdownPreview([
|
|
38
|
+
{
|
|
39
|
+
name: 'param',
|
|
40
|
+
text: 'a x {@link http://www.example.com/foo abc xyz} y {@link http://www.example.com/bar|b a z} z',
|
|
41
|
+
},
|
|
42
|
+
], noopToResource), '*@param* `a` — x [abc xyz](http://www.example.com/foo) y [b a z](http://www.example.com/bar) z');
|
|
43
|
+
});
|
|
44
|
+
it('Should ignore unclosed jsdocs @link', async () => {
|
|
45
|
+
assert.strictEqual(markdownDocumentation('x {@link http://www.example.com/foo y {@link http://www.example.com/bar bar} z', [], noopToResource).value, 'x {@link http://www.example.com/foo y [bar](http://www.example.com/bar) z');
|
|
46
|
+
});
|
|
47
|
+
it('Should support non-ascii characters in parameter name (#90108)', async () => {
|
|
48
|
+
assert.strictEqual(tagsMarkdownPreview([
|
|
49
|
+
{
|
|
50
|
+
name: 'param',
|
|
51
|
+
text: 'parámetroConDiacríticos this will not',
|
|
52
|
+
},
|
|
53
|
+
], noopToResource), '*@param* `parámetroConDiacríticos` — this will not');
|
|
54
|
+
});
|
|
55
|
+
it('Should render @example blocks as code', () => {
|
|
56
|
+
assert.strictEqual(tagsMarkdownPreview([
|
|
57
|
+
{
|
|
58
|
+
name: 'example',
|
|
59
|
+
text: 'code();',
|
|
60
|
+
},
|
|
61
|
+
], noopToResource), '*@example* \n```\ncode();\n```');
|
|
62
|
+
});
|
|
63
|
+
it('Should not render @example blocks as code as if they contain a codeblock', () => {
|
|
64
|
+
assert.strictEqual(tagsMarkdownPreview([
|
|
65
|
+
{
|
|
66
|
+
name: 'example',
|
|
67
|
+
text: 'Not code\n```\ncode();\n```',
|
|
68
|
+
},
|
|
69
|
+
], noopToResource), '*@example* \nNot code\n```\ncode();\n```');
|
|
70
|
+
});
|
|
71
|
+
it('Should render @example blocks as code if they contain a <caption>', () => {
|
|
72
|
+
assert.strictEqual(tagsMarkdownPreview([
|
|
73
|
+
{
|
|
74
|
+
name: 'example',
|
|
75
|
+
text: '<caption>Not code</caption>\ncode();',
|
|
76
|
+
},
|
|
77
|
+
], noopToResource), '*@example* \nNot code\n```\ncode();\n```');
|
|
78
|
+
});
|
|
79
|
+
it('Should not render @example blocks as code if they contain a <caption> and a codeblock', () => {
|
|
80
|
+
assert.strictEqual(tagsMarkdownPreview([
|
|
81
|
+
{
|
|
82
|
+
name: 'example',
|
|
83
|
+
text: '<caption>Not code</caption>\n```\ncode();\n```',
|
|
84
|
+
},
|
|
85
|
+
], noopToResource), '*@example* \nNot code\n```\ncode();\n```');
|
|
86
|
+
});
|
|
87
|
+
it('Should render @linkcode symbol name as code', async () => {
|
|
88
|
+
assert.strictEqual(plainWithLinks([
|
|
89
|
+
{ text: 'a ', kind: 'text' },
|
|
90
|
+
{ text: '{@linkcode ', kind: 'link' },
|
|
91
|
+
{
|
|
92
|
+
text: 'dog',
|
|
93
|
+
kind: 'linkName',
|
|
94
|
+
target: {
|
|
95
|
+
file: '/path/file.ts',
|
|
96
|
+
start: { line: 7, offset: 5 },
|
|
97
|
+
end: { line: 7, offset: 13 },
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{ text: '}', kind: 'link' },
|
|
101
|
+
{ text: ' b', kind: 'text' },
|
|
102
|
+
], noopToResource), 'a [`dog`](file:///path/file.ts#L7%2C5) b');
|
|
103
|
+
});
|
|
104
|
+
it('Should render @linkcode text as code', async () => {
|
|
105
|
+
assert.strictEqual(plainWithLinks([
|
|
106
|
+
{ text: 'a ', kind: 'text' },
|
|
107
|
+
{ text: '{@linkcode ', kind: 'link' },
|
|
108
|
+
{
|
|
109
|
+
text: 'dog',
|
|
110
|
+
kind: 'linkName',
|
|
111
|
+
target: {
|
|
112
|
+
file: '/path/file.ts',
|
|
113
|
+
start: { line: 7, offset: 5 },
|
|
114
|
+
end: { line: 7, offset: 13 },
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{ text: 'husky', kind: 'linkText' },
|
|
118
|
+
{ text: '}', kind: 'link' },
|
|
119
|
+
{ text: ' b', kind: 'text' },
|
|
120
|
+
], noopToResource), 'a [`husky`](file:///path/file.ts#L7%2C5) b');
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=previewer.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewer.spec.js","sourceRoot":"","sources":["../../src/utils/previewer.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import tsp from 'typescript/lib/protocol.d.js';
|
|
2
|
+
import type { WorkspaceConfigurationImplicitProjectConfigurationOptions } from '../configuration-manager.js';
|
|
3
|
+
export declare function getInferredProjectCompilerOptions(workspaceConfig: WorkspaceConfigurationImplicitProjectConfigurationOptions): tsp.ExternalProjectCompilerOptions;
|
|
4
|
+
//# sourceMappingURL=tsconfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsconfig.d.ts","sourceRoot":"","sources":["../../src/utils/tsconfig.ts"],"names":[],"mappings":"AAWA,OAAO,GAAG,MAAM,8BAA8B,CAAC;AAC/C,OAAO,KAAK,EAAE,yDAAyD,EAAE,MAAM,6BAA6B,CAAC;AAS7G,wBAAgB,iCAAiC,CAC7C,eAAe,EAAE,yDAAyD,GAC3E,GAAG,CAAC,8BAA8B,CA8BpC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (C) 2022 TypeFox and others.
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*/
|
|
11
|
+
const DEFAULT_PROJECT_CONFIG = Object.freeze({
|
|
12
|
+
module: "ESNext" /* tsp.ModuleKind.ESNext */,
|
|
13
|
+
moduleResolution: "Node" /* tsp.ModuleResolutionKind.Node */,
|
|
14
|
+
target: "ES2020" /* tsp.ScriptTarget.ES2020 */,
|
|
15
|
+
jsx: "React" /* tsp.JsxEmit.React */,
|
|
16
|
+
});
|
|
17
|
+
export function getInferredProjectCompilerOptions(workspaceConfig) {
|
|
18
|
+
const projectConfig = { ...DEFAULT_PROJECT_CONFIG };
|
|
19
|
+
if (workspaceConfig.checkJs) {
|
|
20
|
+
projectConfig.checkJs = true;
|
|
21
|
+
}
|
|
22
|
+
if (workspaceConfig.experimentalDecorators) {
|
|
23
|
+
projectConfig.experimentalDecorators = true;
|
|
24
|
+
}
|
|
25
|
+
if (workspaceConfig.strictNullChecks) {
|
|
26
|
+
projectConfig.strictNullChecks = true;
|
|
27
|
+
}
|
|
28
|
+
if (workspaceConfig.strictFunctionTypes) {
|
|
29
|
+
projectConfig.strictFunctionTypes = true;
|
|
30
|
+
}
|
|
31
|
+
if (workspaceConfig.module) {
|
|
32
|
+
projectConfig.module = workspaceConfig.module;
|
|
33
|
+
}
|
|
34
|
+
if (workspaceConfig.target) {
|
|
35
|
+
projectConfig.target = workspaceConfig.target;
|
|
36
|
+
}
|
|
37
|
+
projectConfig.sourceMap = true;
|
|
38
|
+
return projectConfig;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tsconfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tsconfig.js","sourceRoot":"","sources":["../../src/utils/tsconfig.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;;;;GAKG;AAKH,MAAM,sBAAsB,GAAuC,MAAM,CAAC,MAAM,CAAC;IAC7E,MAAM,sCAAuB;IAC7B,gBAAgB,4CAA+B;IAC/C,MAAM,wCAAyB;IAC/B,GAAG,iCAAmB;CACzB,CAAC,CAAC;AAEH,MAAM,UAAU,iCAAiC,CAC7C,eAA0E;IAE1E,MAAM,aAAa,GAAG,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAEpD,IAAI,eAAe,CAAC,OAAO,EAAE;QACzB,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;KAChC;IAED,IAAI,eAAe,CAAC,sBAAsB,EAAE;QACxC,aAAa,CAAC,sBAAsB,GAAG,IAAI,CAAC;KAC/C;IAED,IAAI,eAAe,CAAC,gBAAgB,EAAE;QAClC,aAAa,CAAC,gBAAgB,GAAG,IAAI,CAAC;KACzC;IAED,IAAI,eAAe,CAAC,mBAAmB,EAAE;QACrC,aAAa,CAAC,mBAAmB,GAAG,IAAI,CAAC;KAC5C;IAED,IAAI,eAAe,CAAC,MAAM,EAAE;QACxB,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,MAAwB,CAAC;KACnE;IAED,IAAI,eAAe,CAAC,MAAM,EAAE;QACxB,aAAa,CAAC,MAAM,GAAG,eAAe,CAAC,MAA0B,CAAC;KACrE;IAED,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;IAE/B,OAAO,aAAa,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-language-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Language Server Protocol (LSP) implementation for TypeScript using tsserver",
|
|
5
5
|
"author": "TypeFox and others",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"commander": "^9.4.
|
|
44
|
+
"commander": "^9.4.1",
|
|
45
45
|
"deepmerge": "^4.2.2",
|
|
46
46
|
"fs-extra": "^10.1.0",
|
|
47
47
|
"p-debounce": "^4.0.0",
|
|
48
48
|
"pkg-up": "^4.0.0",
|
|
49
|
-
"semver": "^7.3.
|
|
49
|
+
"semver": "^7.3.8",
|
|
50
50
|
"tempy": "^3.0.0",
|
|
51
51
|
"vscode-languageserver": "^8.0.2",
|
|
52
52
|
"vscode-languageserver-protocol": "^3.17.2",
|
|
@@ -58,12 +58,12 @@
|
|
|
58
58
|
"@types/chai": "^4.3.3",
|
|
59
59
|
"@types/deepmerge": "^2.2.0",
|
|
60
60
|
"@types/fs-extra": "^9.0.13",
|
|
61
|
-
"@types/mocha": "^
|
|
62
|
-
"@types/node": "^16.11.
|
|
61
|
+
"@types/mocha": "^10.0.0",
|
|
62
|
+
"@types/node": "^16.11.64",
|
|
63
63
|
"@types/semver": "^7.3.12",
|
|
64
64
|
"@types/which": "^2.0.1",
|
|
65
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
66
|
-
"@typescript-eslint/parser": "^5.
|
|
65
|
+
"@typescript-eslint/eslint-plugin": "^5.39.0",
|
|
66
|
+
"@typescript-eslint/parser": "^5.39.0",
|
|
67
67
|
"chai": "^4.3.6",
|
|
68
68
|
"concurrently": "^7.4.0",
|
|
69
69
|
"cross-env": "^7.0.3",
|