Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/linkify/test/vscode-node/symbolLinkifier.test.ts
13405 views
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
import * as vscode from 'vscode';
7
import { NullEnvService } from '../../../../platform/env/common/nullEnvService';
8
import { LinkifySymbolAnchor } from '../../common/linkifiedText';
9
import { ILinkifyService, LinkifyService } from '../../common/linkifyService';
10
import { SymbolLinkifier } from '../../vscode-node/symbolLinkifier';
11
import { assertPartsEqual, createMockFsService, createMockWorkspaceService, linkify, workspaceFile } from '../node/util';
12
13
function createTestLinkifierService(...listOfFiles: readonly string[]): ILinkifyService {
14
const fs = createMockFsService(listOfFiles);
15
const workspaceService = createMockWorkspaceService();
16
const linkifier = new LinkifyService(fs, workspaceService, NullEnvService.Instance);
17
linkifier.registerGlobalLinkifier({ create: () => new SymbolLinkifier(fs, workspaceService) });
18
return linkifier;
19
}
20
21
suite('Symbol Linkify', () => {
22
23
test(`Should create symbol links from Markdown links`, async () => {
24
const linkifier = createTestLinkifierService(
25
'file.ts',
26
'src/file.ts',
27
);
28
assertPartsEqual(
29
(await linkify(linkifier,
30
'[`symbol`](file.ts) [`symbol`](src/file.ts)')
31
).parts,
32
[
33
new LinkifySymbolAnchor({
34
name: 'symbol',
35
containerName: '',
36
kind: vscode.SymbolKind.Constant,
37
location: new vscode.Location(workspaceFile('file.ts'), new vscode.Position(0, 0))
38
}),
39
' ',
40
new LinkifySymbolAnchor({
41
name: 'symbol',
42
containerName: '',
43
kind: vscode.SymbolKind.Constant,
44
location: new vscode.Location(workspaceFile('src/file.ts'), new vscode.Position(0, 0))
45
})
46
],
47
);
48
});
49
50
test(`Should de-linkify symbol links to files that don't exist`, async () => {
51
const linkifier = createTestLinkifierService();
52
assertPartsEqual(
53
(await linkify(linkifier,
54
'[`symbol`](file.ts) [`symbol`](src/file.ts)'
55
)).parts,
56
[
57
'`symbol` `symbol`'
58
],
59
);
60
});
61
62
test(`Should create symbol links for symbols containing $ or _`, async () => {
63
const linkifier = createTestLinkifierService(
64
'file.ts',
65
'src/file.ts',
66
);
67
assertPartsEqual(
68
(await linkify(linkifier,
69
'[`_symbol`](file.ts) [`$symbol`](src/file.ts)',
70
)).parts,
71
[
72
new LinkifySymbolAnchor({
73
name: '_symbol',
74
containerName: '',
75
kind: vscode.SymbolKind.Constant,
76
location: new vscode.Location(workspaceFile('file.ts'), new vscode.Position(0, 0))
77
}),
78
' ',
79
new LinkifySymbolAnchor({
80
name: '$symbol',
81
containerName: '',
82
kind: vscode.SymbolKind.Constant,
83
location: new vscode.Location(workspaceFile('src/file.ts'), new vscode.Position(0, 0))
84
})
85
],
86
);
87
});
88
89
test(`Should create symbol links for symbols with function call or generic syntax`, async () => {
90
const linkifier = createTestLinkifierService(
91
'file.ts',
92
'src/file.ts',
93
);
94
95
assertPartsEqual(
96
(await linkify(linkifier,
97
'[`symbol<T>`](file.ts) [`func()`](src/file.ts)',
98
)).parts,
99
[
100
new LinkifySymbolAnchor({
101
name: 'symbol<T>',
102
containerName: '',
103
kind: vscode.SymbolKind.Constant,
104
location: new vscode.Location(workspaceFile('file.ts'), new vscode.Position(0, 0))
105
}),
106
' ',
107
new LinkifySymbolAnchor({
108
name: 'func()',
109
containerName: '',
110
kind: vscode.SymbolKind.Constant,
111
location: new vscode.Location(workspaceFile('src/file.ts'), new vscode.Position(0, 0))
112
})
113
]
114
);
115
});
116
117
test(`Should support files with spaces`, async () => {
118
const linkifier = createTestLinkifierService(
119
'space file.ts',
120
);
121
assertPartsEqual(
122
(await linkify(linkifier,
123
'[`symbol`](space%20file.ts) [`symbol`](space%20file.ts)')
124
).parts,
125
[
126
new LinkifySymbolAnchor({
127
name: 'symbol',
128
containerName: '',
129
kind: vscode.SymbolKind.Constant,
130
location: new vscode.Location(workspaceFile('space file.ts'), new vscode.Position(0, 0))
131
}),
132
' ',
133
new LinkifySymbolAnchor({
134
name: 'symbol',
135
containerName: '',
136
kind: vscode.SymbolKind.Constant,
137
location: new vscode.Location(workspaceFile('space file.ts'), new vscode.Position(0, 0))
138
})
139
],
140
);
141
});
142
});
143
144