diff --git a/scripts/processDiagnosticMessages.ts b/scripts/processDiagnosticMessages.ts
index dd66564b134..5b45fdeaae8 100644
--- a/scripts/processDiagnosticMessages.ts
+++ b/scripts/processDiagnosticMessages.ts
@@ -4,6 +4,7 @@
interface DiagnosticDetails {
category: string;
code: number;
+ reportsUnnecessary?: {};
isEarly?: boolean;
}
@@ -59,14 +60,15 @@ function buildInfoFileOutput(messageTable: InputDiagnosticMessageTable, inputFil
"/// \r\n" +
"/* @internal */\r\n" +
"namespace ts {\r\n" +
- " function diag(code: number, category: DiagnosticCategory, key: string, message: string): DiagnosticMessage {\r\n" +
- " return { code, category, key, message };\r\n" +
+ " function diag(code: number, category: DiagnosticCategory, key: string, message: string, reportsUnnecessary?: {}): DiagnosticMessage {\r\n" +
+ " return { code, category, key, message, reportsUnnecessary };\r\n" +
" }\r\n" +
" // tslint:disable-next-line variable-name\r\n" +
" export const Diagnostics = {\r\n";
- messageTable.forEach(({ code, category }, name) => {
+ messageTable.forEach(({ code, category, reportsUnnecessary }, name) => {
const propName = convertPropertyName(name);
- result += ` ${propName}: diag(${code}, DiagnosticCategory.${category}, "${createKey(propName, code)}", ${JSON.stringify(name)}),\r\n`;
+ const argReportsUnnecessary = reportsUnnecessary ? `, /*reportsUnnecessary*/ ${reportsUnnecessary}` : "";
+ result += ` ${propName}: diag(${code}, DiagnosticCategory.${category}, "${createKey(propName, code)}", ${JSON.stringify(name)}${argReportsUnnecessary}),\r\n`;
});
result += " };\r\n}";
diff --git a/src/compiler/core.ts b/src/compiler/core.ts
index 2d3b2a2a0ce..cbfcf127200 100644
--- a/src/compiler/core.ts
+++ b/src/compiler/core.ts
@@ -1606,7 +1606,7 @@ namespace ts {
messageText: text,
category: message.category,
code: message.code,
- reportsUnnecessary: message.unused,
+ reportsUnnecessary: message.reportsUnnecessary,
};
}
@@ -1637,7 +1637,7 @@ namespace ts {
messageText: text,
category: message.category,
code: message.code,
- reportsUnnecessary: message.unused,
+ reportsUnnecessary: message.reportsUnnecessary,
};
}
diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json
index 69a90fbabf5..2b56e551f1b 100644
--- a/src/compiler/diagnosticMessages.json
+++ b/src/compiler/diagnosticMessages.json
@@ -3286,7 +3286,7 @@
"'{0}' is declared but its value is never read.": {
"category": "Error",
"code": 6133,
- "unused": true
+ "reportsUnnecessary": true
},
"Report errors on unused locals.": {
"category": "Message",
@@ -3307,7 +3307,7 @@
"Property '{0}' is declared but its value is never read.": {
"category": "Error",
"code": 6138,
- "unused": true
+ "reportsUnnecessary": true
},
"Import emit helpers from 'tslib'.": {
"category": "Message",
@@ -3520,7 +3520,7 @@
"All imports in import declaration are unused.": {
"category": "Error",
"code": 6192,
- "unused": true
+ "reportsUnnecessary": true
},
"Found 1 error.": {
"category": "Message",
@@ -3609,7 +3609,7 @@
"Unused label.": {
"category": "Error",
"code": 7028,
- "unused": true
+ "reportsUnnecessary": true
},
"Fallthrough case in switch.": {
"category": "Error",
diff --git a/src/compiler/types.ts b/src/compiler/types.ts
index ac32d91c61a..f0aba4a34d7 100644
--- a/src/compiler/types.ts
+++ b/src/compiler/types.ts
@@ -4076,7 +4076,7 @@ namespace ts {
category: DiagnosticCategory;
code: number;
message: string;
- unused?: {};
+ reportsUnnecessary?: {};
}
/**
diff --git a/src/harness/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts
index 8170c663b1f..ab0b1cf734d 100644
--- a/src/harness/unittests/tsserverProjectSystem.ts
+++ b/src/harness/unittests/tsserverProjectSystem.ts
@@ -4131,10 +4131,10 @@ namespace ts.projectSystem {
checkErrorMessage(session, "semanticDiag", { file: file1.path, diagnostics: [] });
});
- it("info diagnostics", () => {
+ it("suggestion diagnostics", () => {
const file: FileOrFolder = {
path: "/a.js",
- content: 'require("b")',
+ content: "function f(p) {}",
};
const host = createServerHost([file]);
@@ -4177,7 +4177,7 @@ namespace ts.projectSystem {
checkErrorMessage(session, "suggestionDiag", {
file: file.path,
diagnostics: [
- createDiagnostic({ line: 1, offset: 1 }, { line: 1, offset: 13 }, Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES6_module)
+ createDiagnostic({ line: 1, offset: 12 }, { line: 1, offset: 13 }, Diagnostics._0_is_declared_but_its_value_is_never_read, ["p"], "suggestion", /*reportsUnnecssary*/ true)
],
});
checkCompleteEvent(session, 2, expectedSequenceId);
@@ -4241,8 +4241,8 @@ namespace ts.projectSystem {
session.clearMessages();
});
- function createDiagnostic(start: protocol.Location, end: protocol.Location, message: DiagnosticMessage, args: ReadonlyArray = []): protocol.Diagnostic {
- return { start, end, text: formatStringFromArgs(message.message, args), code: message.code, category: diagnosticCategoryName(message), source: undefined };
+ function createDiagnostic(start: protocol.Location, end: protocol.Location, message: DiagnosticMessage, args: ReadonlyArray = [], category = diagnosticCategoryName(message), reportsUnnecessary?: {}): protocol.Diagnostic {
+ return { start, end, text: formatStringFromArgs(message.message, args), code: message.code, category, reportsUnnecessary, source: undefined };
}
});
diff --git a/src/server/protocol.ts b/src/server/protocol.ts
index 74b6865a3c3..52427413aed 100644
--- a/src/server/protocol.ts
+++ b/src/server/protocol.ts
@@ -2172,6 +2172,8 @@ namespace ts.server.protocol {
*/
category: string;
+ reportsUnnecessary?: {};
+
/**
* The error code of the diagnostic message.
*/
diff --git a/src/server/session.ts b/src/server/session.ts
index 3979687d631..c6066723892 100644
--- a/src/server/session.ts
+++ b/src/server/session.ts
@@ -80,6 +80,7 @@ namespace ts.server {
text: flattenDiagnosticMessageText(diag.messageText, "\n"),
code: diag.code,
category: diagnosticCategoryName(diag),
+ reportsUnnecessary: diag.reportsUnnecessary,
source: diag.source
};
}
@@ -96,8 +97,8 @@ namespace ts.server {
const text = flattenDiagnosticMessageText(diag.messageText, "\n");
const { code, source } = diag;
const category = diagnosticCategoryName(diag);
- return includeFileName ? { start, end, text, code, category, source, fileName: diag.file && diag.file.fileName } :
- { start, end, text, code, category, source };
+ return includeFileName ? { start, end, text, code, category, source, reportsUnnecessary: diag.reportsUnnecessary, fileName: diag.file && diag.file.fileName } :
+ { start, end, text, code, category, reportsUnnecessary: diag.reportsUnnecessary, source };
}
export interface PendingErrorCheck {
diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts
index f602e872c14..49b9c2b5eca 100644
--- a/tests/baselines/reference/api/tsserverlibrary.d.ts
+++ b/tests/baselines/reference/api/tsserverlibrary.d.ts
@@ -2275,7 +2275,7 @@ declare namespace ts {
category: DiagnosticCategory;
code: number;
message: string;
- unused?: {};
+ reportsUnnecessary?: {};
}
/**
* A linked list of formatted diagnostic messages to be used as part of a multiline message.
@@ -6758,6 +6758,7 @@ declare namespace ts.server.protocol {
* The category of the diagnostic message, e.g. "error", "warning", or "suggestion".
*/
category: string;
+ reportsUnnecessary?: {};
/**
* The error code of the diagnostic message.
*/
diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts
index 94fd684daee..f8a63a21575 100644
--- a/tests/baselines/reference/api/typescript.d.ts
+++ b/tests/baselines/reference/api/typescript.d.ts
@@ -2275,7 +2275,7 @@ declare namespace ts {
category: DiagnosticCategory;
code: number;
message: string;
- unused?: {};
+ reportsUnnecessary?: {};
}
/**
* A linked list of formatted diagnostic messages to be used as part of a multiline message.