Skip to content

Commit a83a2b0

Browse files
author
Paul van Brenk
committed
Codefixes in client for testing the server.
1 parent 77610f6 commit a83a2b0

4 files changed

Lines changed: 85 additions & 7 deletions

File tree

src/server/client.ts

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -425,11 +425,35 @@ namespace ts.server {
425425
}
426426

427427
getSyntacticDiagnostics(fileName: string): Diagnostic[] {
428-
throw new Error("Not Implemented Yet.");
428+
const args: protocol.SyntacticDiagnosticsSyncRequestArgs = { file: fileName };
429+
430+
const request = this.processRequest<protocol.SyntacticDiagnosticsSyncRequest>(CommandNames.SyntacticDiagnosticsSync, args);
431+
const response = this.processResponse<protocol.SyntacticDiagnosticsSyncResponse>(request);
432+
433+
return (<protocol.Diagnostic[]>response.body).map(entry => this.convertDiagnostic(entry, fileName));
429434
}
430435

431436
getSemanticDiagnostics(fileName: string): Diagnostic[] {
432-
throw new Error("Not Implemented Yet.");
437+
const args: protocol.SemanticDiagnosticsSyncRequestArgs = { file: fileName };
438+
439+
const request = this.processRequest<protocol.SemanticDiagnosticsSyncRequest>(CommandNames.SemanticDiagnosticsSync, args);
440+
const response = this.processResponse<protocol.SemanticDiagnosticsSyncResponse>(request);
441+
442+
return (<protocol.Diagnostic[]>response.body).map(entry => this.convertDiagnostic(entry, fileName));
443+
}
444+
445+
convertDiagnostic(entry: protocol.Diagnostic, fileName: string): Diagnostic {
446+
const start = this.lineOffsetToPosition(fileName, entry.start);
447+
const end = this.lineOffsetToPosition(fileName, entry.end);
448+
449+
return {
450+
file: undefined,
451+
start: start,
452+
length: end - start,
453+
messageText: entry.text,
454+
category: undefined,
455+
code: entry.code
456+
};
433457
}
434458

435459
getCompilerOptionsDiagnostics(): Diagnostic[] {
@@ -630,8 +654,46 @@ namespace ts.server {
630654
throw new Error("Not Implemented Yet.");
631655
}
632656

633-
getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[]): ts.CodeAction[] {
634-
throw new Error("Not Implemented Yet.");
657+
getCodeFixesAtPosition(fileName: string, start: number, end: number, errorCodes: number[]): CodeAction[] {
658+
const startLineOffset = this.positionToOneBasedLineOffset(fileName, start);
659+
const endLineOffset = this.positionToOneBasedLineOffset(fileName, end);
660+
661+
const args: protocol.CodeFixRequestArgs = {
662+
file: fileName,
663+
startLine: startLineOffset.line,
664+
startOffset: startLineOffset.offset,
665+
endLine: endLineOffset.line,
666+
endOffset: endLineOffset.offset,
667+
errorCodes: errorCodes,
668+
};
669+
670+
const request = this.processRequest<protocol.CodeFixRequest>(CommandNames.GetCodeFixesFull, args);
671+
const response = this.processResponse<protocol.CodeFixResponse>(request);
672+
673+
return response.body.map(entry => this.convertCodeActions(entry, fileName));
674+
}
675+
676+
convertCodeActions(entry: protocol.CodeAction, fileName: string): CodeAction {
677+
return {
678+
description: entry.description,
679+
changes: entry.changes.map(change => ({
680+
fileName: change.fileName,
681+
textChanges: change.textChanges.map(textChange => this.convertTextChangeToCodeEdit(textChange, fileName))
682+
}))
683+
};
684+
}
685+
686+
convertTextChangeToCodeEdit(change: protocol.CodeEdit, fileName: string): ts.TextChange {
687+
const start = this.lineOffsetToPosition(fileName, change.start);
688+
const end = this.lineOffsetToPosition(fileName, change.end);
689+
690+
return {
691+
span: {
692+
start: start,
693+
length: end - start
694+
},
695+
newText: change.newText ? change.newText : ""
696+
};
635697
}
636698

637699
getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[] {

src/server/protocol.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,6 +1310,11 @@ declare namespace ts.server.protocol {
13101310
* Text of diagnostic message.
13111311
*/
13121312
text: string;
1313+
1314+
/**
1315+
* The error code of the diagnostic message.
1316+
*/
1317+
code?: number;
13131318
}
13141319

13151320
export interface DiagnosticEventBody {

src/server/session.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/// <reference path="..\compiler\commandLineParser.ts" />
1+
/// <reference path="..\compiler\commandLineParser.ts" />
22
/// <reference path="..\services\services.ts" />
33
/// <reference path="protocol.d.ts" />
44
/// <reference path="editorServices.ts" />
@@ -44,7 +44,8 @@ namespace ts.server {
4444
return {
4545
start: scriptInfo.positionToLineOffset(diag.start),
4646
end: scriptInfo.positionToLineOffset(diag.start + diag.length),
47-
text: ts.flattenDiagnosticMessageText(diag.messageText, "\n")
47+
text: ts.flattenDiagnosticMessageText(diag.messageText, "\n"),
48+
code: diag.code
4849
};
4950
}
5051

@@ -1241,7 +1242,7 @@ namespace ts.server {
12411242
return {
12421243
start: scriptInfo.positionToLineOffset(change.span.start),
12431244
end: scriptInfo.positionToLineOffset(change.span.start + change.span.length),
1244-
newText: change.newText
1245+
newText: change.newText ? change.newText : ""
12451246
};
12461247
}
12471248

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/// <reference path='fourslash.ts' />
2+
3+
////class Base{
4+
////}
5+
////class C extends Base{
6+
//// constructor() {[| |]
7+
//// }
8+
////}
9+
10+
verify.codeFixAtPosition('super();');

0 commit comments

Comments
 (0)