Skip to content

Commit 58610bd

Browse files
committed
Fix semantic tokens when cohosting is turned off
1 parent a1b528f commit 58610bd

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

src/lsptoolshost/razor/razorCommands.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ export const provideCodeActionsCommand = 'roslyn.provideCodeActions';
4040
export const resolveCodeActionCommand = 'roslyn.resolveCodeAction';
4141
export const provideCompletionsCommand = 'roslyn.provideCompletions';
4242
export const resolveCompletionsCommand = 'roslyn.resolveCompletion';
43-
export const provideSemanticTokensRangeCommand = 'roslyn.provideSemanticTokensRange';
4443
export const roslynSimplifyMethodCommand = 'roslyn.simplifyMethod';
4544
export const roslynFormatNewFileCommand = 'roslyn.formatNewFile';
4645
export const razorInitializeCommand = 'razor.initialize';

src/razor/src/semantic/semanticTokensRangeHandler.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ import { SerializableSemanticTokensParams } from './serializableSemanticTokensPa
1111
import { RazorDocumentManager } from '../document/razorDocumentManager';
1212
import { RazorDocumentSynchronizer } from '../document/razorDocumentSynchronizer';
1313
import { RazorLogger } from '../razorLogger';
14+
import { SerializableRange } from '../rpc/serializableRange';
1415

1516
export class SemanticTokensRangeHandler {
16-
private static readonly getSemanticTokensRangeEndpoint = 'razor/provideSemanticTokensRange';
17+
private static readonly getSemanticTokensRangeEndpoint = 'razor/provideSemanticTokensRanges';
1718
private semanticTokensRequestType: RequestType<
1819
SerializableSemanticTokensParams,
1920
ProvideSemanticTokensResponse,
@@ -86,10 +87,13 @@ export class SemanticTokensRangeHandler {
8687
}
8788
}
8889

90+
// We get multiple ranges in semanticTokensParams.ranges, and we just want to compute one range which encompasses it all
91+
const reducedRange = this.reduceRanges(semanticTokensParams.ranges);
92+
8993
const tokens = await vscode.commands.executeCommand<vscode.SemanticTokens>(
9094
'vscode.provideDocumentRangeSemanticTokens',
9195
razorDocument.csharpDocument.uri,
92-
semanticTokensParams.ranges[0]
96+
reducedRange
9397
);
9498

9599
return new ProvideSemanticTokensResponse(
@@ -106,6 +110,37 @@ export class SemanticTokensRangeHandler {
106110
);
107111
}
108112

113+
private reduceRanges(ranges: SerializableRange[]) {
114+
if (!ranges || ranges.length === 0) {
115+
return { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } };
116+
}
117+
118+
// Start with the first range's bounds
119+
let minStart = ranges[0].start;
120+
let maxEnd = ranges[0].end;
121+
122+
for (const range of ranges) {
123+
const s = range.start;
124+
const e = range.end;
125+
126+
// Update minStart if this range starts earlier
127+
if (s.line < minStart.line || (s.line === minStart.line && s.character < minStart.character)) {
128+
minStart = s;
129+
}
130+
131+
// Update maxEnd if this range ends later
132+
if (e.line > maxEnd.line || (e.line === maxEnd.line && e.character > maxEnd.character)) {
133+
maxEnd = e;
134+
}
135+
}
136+
137+
// Return new SerializableRange composed from the computed bounds
138+
return {
139+
start: { line: minStart.line, character: minStart.character },
140+
end: { line: maxEnd.line, character: maxEnd.character },
141+
};
142+
}
143+
109144
private countLines(text: string) {
110145
let lineCount = 0;
111146
for (const i of text) {

0 commit comments

Comments
 (0)