Skip to content

Commit e5ca31b

Browse files
committed
Update protocol changes
1 parent 467b5cd commit e5ca31b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+324
-152
lines changed

src/harness/client.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,12 @@ namespace ts.server {
644644

645645
return response.body!.map(item => ({ // TODO: GH#18217
646646
text: item.text,
647-
range: this.decodeSpan(item.range, file)
647+
range: this.decodeSpan(item.range, file),
648+
triggerPosition: this.lineOffsetToPosition(file, item.triggerPosition),
649+
prefix: item.prefix,
650+
postfix: item.postfix,
651+
whitespaceBefore: item.whitespaceBefore,
652+
whitespaceAfter: item.whitespaceAfter
648653
}));
649654
}
650655

src/harness/fourslashImpl.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,9 @@ namespace FourSlash {
850850
ts.zipWith(hints.sort(sortHints), [...expected].sort(compareHintOptions), (actual, expected) => {
851851
assert.equal(actual.text, expected.text, "Text");
852852
assert.deepEqual(actual.range, normalizeVerifyInlineHintsOptions(expected.rangeOrPosition), "RangeOrPosition");
853+
assert.equal(actual.triggerPosition, expected.triggerPosition, "TriggerPosition");
854+
assert.equal(actual.prefix, expected.prefix, "Prefix");
855+
assert.equal(actual.postfix, expected.postfix, "Postfix");
853856
assert.equal(actual.whitespaceBefore, expected.whitespaceBefore, "whitespaceBefore");
854857
assert.equal(actual.whitespaceAfter, expected.whitespaceAfter, "whitespaceAfter");
855858
});

src/harness/fourslashInterfaceImpl.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1652,6 +1652,9 @@ namespace FourSlashInterface {
16521652
export interface VerifyInlineHintsOptions {
16531653
text: string;
16541654
rangeOrPosition: number | ts.TextSpan;
1655+
triggerPosition: number;
1656+
prefix?: string;
1657+
postfix?: string;
16551658
whitespaceBefore?: boolean;
16561659
whitespaceAfter?: boolean;
16571660
}

src/server/protocol.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2493,6 +2493,9 @@ namespace ts.server.protocol {
24932493
export interface HintItem {
24942494
text: string;
24952495
range: TextSpan;
2496+
triggerPosition: Location;
2497+
prefix?: string;
2498+
postfix?: string;
24962499
whitespaceBefore?: boolean;
24972500
whitespaceAfter?: boolean;
24982501
}

src/server/session.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,9 @@ namespace ts.server {
14291429
return hints.map(hint => ({
14301430
text: hint.text,
14311431
range: scriptInfo.textSpanToProtoTextSpan(hint.range),
1432+
triggerPosition: scriptInfo.positionToLineOffset(hint.triggerPosition),
1433+
prefix: hint.prefix,
1434+
postfix: hint.postfix,
14321435
whitespaceBefore: hint.whitespaceBefore,
14331436
whitespaceAfter: hint.whitespaceAfter
14341437
}));

src/services/inlineHints.ts

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ namespace ts.InlineHints {
33
interface HintInfo {
44
text: string;
55
range: TextSpan;
6+
triggerPosition: number;
7+
prefix?: string;
8+
postfix?: string;
69
whitespaceBefore?: boolean;
710
whitespaceAfter?: boolean;
811
}
@@ -80,26 +83,32 @@ namespace ts.InlineHints {
8083
return isArrowFunction(node) || isFunctionExpression(node) || isFunctionDeclaration(node) || isMethodDeclaration(node);
8184
}
8285

83-
function addNameHints(text: string, range: TextSpan) {
86+
function addNameHints(node: Node, text: string, range: TextSpan) {
8487
result.push({
85-
text: `${truncation(text, maxHintsLength)}:`,
88+
text: truncation(text, maxHintsLength),
8689
range,
90+
triggerPosition: node.getStart(),
91+
postfix: ":",
8792
whitespaceAfter: true,
8893
});
8994
}
9095

91-
function addTypeHints(text: string, range: TextSpan) {
96+
function addTypeHints(node: Node, text: string, range: TextSpan) {
9297
result.push({
93-
text: `:${truncation(text, maxHintsLength)}`,
98+
text: truncation(text, maxHintsLength),
9499
range,
100+
triggerPosition: node.getStart(),
101+
prefix: ":",
95102
whitespaceBefore: true,
96103
});
97104
}
98105

99-
function addEnumMemberValueHints(text: string, range: TextSpan) {
106+
function addEnumMemberValueHints(node: Node, text: string, range: TextSpan) {
100107
result.push({
101-
text: `= ${truncation(text, maxHintsLength)}`,
108+
text: truncation(text, maxHintsLength),
102109
range,
110+
triggerPosition: node.getStart(),
111+
prefix: "= ",
103112
whitespaceBefore: true,
104113
});
105114
}
@@ -121,7 +130,7 @@ namespace ts.InlineHints {
121130
return;
122131
}
123132

124-
addTypeHints(typeDisplayString, makeEmptyRange(call.end));
133+
addTypeHints(call, typeDisplayString, makeEmptyRange(call.end));
125134
}
126135

127136
function shouldCallExpressionHint(call: CallExpression) {
@@ -151,7 +160,7 @@ namespace ts.InlineHints {
151160

152161
const enumValue = checker.getConstantValue(member);
153162
if (enumValue !== undefined) {
154-
addEnumMemberValueHints(enumValue.toString(), makeEmptyRange(member.end));
163+
addEnumMemberValueHints(member, enumValue.toString(), makeEmptyRange(member.end));
155164
}
156165
}
157166

@@ -167,7 +176,7 @@ namespace ts.InlineHints {
167176

168177
const typeDisplayString = printTypeInSingleLine(declarationType);
169178
if (typeDisplayString) {
170-
addTypeHints(typeDisplayString, makeEmptyRange(decl.name.end));
179+
addTypeHints(decl.name, typeDisplayString, makeEmptyRange(decl.name.end));
171180
}
172181
}
173182

@@ -191,7 +200,7 @@ namespace ts.InlineHints {
191200
const parameterName = checker.getParameterIdentifierNameAtPosition(signature, i);
192201
if (parameterName) {
193202
if (preferences.includeInlineDuplicatedParameterNameHints || !isIdentifier(arg) || arg.text !== parameterName) {
194-
addNameHints(unescapeLeadingUnderscores(parameterName), makeEmptyRange(expr.arguments[i].getStart()));
203+
addNameHints(arg, unescapeLeadingUnderscores(parameterName), makeEmptyRange(expr.arguments[i].getStart()));
195204
}
196205
}
197206
}
@@ -219,7 +228,7 @@ namespace ts.InlineHints {
219228
return;
220229
}
221230

222-
addTypeHints(typeDisplayString, makeEmptyRange(getTypeAnnotationPosition(decl)));
231+
addTypeHints(decl, typeDisplayString, makeEmptyRange(getTypeAnnotationPosition(decl)));
223232
}
224233

225234
function getTypeAnnotationPosition(decl: ArrowFunction | FunctionExpression | MethodDeclaration | FunctionDeclaration) {
@@ -257,7 +266,7 @@ namespace ts.InlineHints {
257266
continue;
258267
}
259268

260-
addTypeHints(typeDisplayString, makeEmptyRange(param.end));
269+
addTypeHints(param, typeDisplayString, makeEmptyRange(param.end));
261270
}
262271
}
263272

src/services/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,9 @@ namespace ts {
703703
export interface InlineHint {
704704
text: string;
705705
range: TextSpan;
706+
triggerPosition: number;
707+
prefix?: string;
708+
postfix?: string;
706709
whitespaceBefore?: boolean;
707710
whitespaceAfter?: boolean;
708711
}

tests/cases/fourslash/fourslash.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,9 @@ declare namespace FourSlashInterface {
730730
export interface VerifyInlineHintsOptions {
731731
text: string;
732732
rangeOrPosition: number |TextSpan;
733+
triggerPosition: number;
734+
prefix?: string;
735+
postfix?: string;
733736
whitespaceBefore?: boolean;
734737
whitespaceAfter?: boolean;
735738
}

tests/cases/fourslash/inlineHintsShouldWork1.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@
66
const markers = test.markers();
77
verify.getInlineHints([
88
{
9-
text: 'a:',
9+
text: 'a',
1010
rangeOrPosition: markers[0].position,
11+
triggerPosition: markers[0].position,
12+
postfix: ':',
1113
whitespaceAfter: true
1214
},
1315
{
14-
text: 'b:',
16+
text: 'b',
1517
rangeOrPosition: markers[1].position,
18+
triggerPosition: markers[1].position,
19+
postfix: ':',
1620
whitespaceAfter: true
1721
}
1822
], undefined, {

tests/cases/fourslash/inlineHintsShouldWork11.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,17 @@
1010
const markers = test.markers();
1111
verify.getInlineHints([
1212
{
13-
text: 'a:',
13+
text: 'a',
1414
rangeOrPosition: markers[0].position,
15+
triggerPosition: markers[0].position,
16+
postfix: ':',
1517
whitespaceAfter: true
1618
},
1719
{
18-
text: 'b:',
20+
text: 'b',
1921
rangeOrPosition: markers[1].position,
22+
triggerPosition: markers[1].position,
23+
postfix: ':',
2024
whitespaceAfter: true
2125
},
2226
], undefined, {

0 commit comments

Comments
 (0)