diff --git a/src/formatters/vsoFormatter.ts b/src/formatters/vsoFormatter.ts index f9ab02aca2e..0df7a88aef8 100644 --- a/src/formatters/vsoFormatter.ts +++ b/src/formatters/vsoFormatter.ts @@ -38,13 +38,14 @@ export class Formatter extends AbstractFormatter { const outputLines = failures.map((failure: RuleFailure) => { const fileName = failure.getFileName(); const failureString = failure.getFailure(); + const failureSeverity = failure.getRuleSeverity(); const lineAndCharacter = failure.getStartPosition().getLineAndCharacter(); const line = lineAndCharacter.line + 1; const character = lineAndCharacter.character + 1; const code = failure.getRuleName(); const properties = `sourcepath=${fileName};linenumber=${line};columnnumber=${character};code=${code};`; - return `##vso[task.logissue type=warning;${properties}]${failureString}`; + return `##vso[task.logissue type=${failureSeverity};${properties}]${failureString}`; }); return `${outputLines.join("\n")}\n`; diff --git a/test/formatters/vsoFormatterTests.ts b/test/formatters/vsoFormatterTests.ts index ce417aa7cee..8f394cc6c71 100644 --- a/test/formatters/vsoFormatterTests.ts +++ b/test/formatters/vsoFormatterTests.ts @@ -50,9 +50,9 @@ describe("VSO Formatter", () => { ]; const expectedResult = - getFailureString(TEST_FILE, 1, 1, "first failure", "first-name") + - getFailureString(TEST_FILE, 2, 12, "mid failure", "mid-name") + - getFailureString(TEST_FILE, 9, 2, "last failure", "last-name"); + getFailureString(TEST_FILE, 1, 1, "first failure", "first-name", "error") + + getFailureString(TEST_FILE, 2, 12, "mid failure", "mid-name", "error") + + getFailureString(TEST_FILE, 9, 2, "last failure", "last-name", "error"); const actualResult = formatter.format(failures); assert.equal(actualResult, expectedResult); @@ -76,9 +76,9 @@ describe("VSO Formatter", () => { ]; const expectedResult = - getFailureString(TEST_FILE, 1, 1, "first failure", "first-name") + - getFailureString(TEST_FILE, 2, 12, "mid failure", "mid-name") + - getFailureString(TEST_FILE, 9, 2, "last failure", "last-name"); + getFailureString(TEST_FILE, 1, 1, "first failure", "first-name", "error") + + getFailureString(TEST_FILE, 2, 12, "mid failure", "mid-name", "error") + + getFailureString(TEST_FILE, 9, 2, "last failure", "last-name", "error"); const fixed = failures.slice(); @@ -86,6 +86,32 @@ describe("VSO Formatter", () => { assert.equal(actualResult, expectedResult); }); + it("outputs correct severity", () => { + const maxPosition = sourceFile.getFullWidth(); + + const failures = [ + createFailure(sourceFile, 0, 1, "first failure", "first-name", undefined, "error"), + createFailure(sourceFile, 32, 36, "mid failure", "mid-name", undefined, "warning"), + createFailure( + sourceFile, + maxPosition - 1, + maxPosition, + "last failure", + "last-name", + undefined, + "error", + ), + ]; + + const expectedResult = + getFailureString(TEST_FILE, 1, 1, "first failure", "first-name", "error") + + getFailureString(TEST_FILE, 2, 12, "mid failure", "mid-name", "warning") + + getFailureString(TEST_FILE, 9, 2, "last failure", "last-name", "error"); + + const actualResult = formatter.format(failures); + assert.equal(actualResult, expectedResult); + }); + it("handles no failures", () => { const result = formatter.format([]); assert.equal(result, "\n"); @@ -97,7 +123,9 @@ describe("VSO Formatter", () => { character: number, reason: string, code: string, + severity: string, ) { - return `##vso[task.logissue type=warning;sourcepath=${file};linenumber=${line};columnnumber=${character};code=${code};]${reason}\n`; + const properties = `sourcepath=${file};linenumber=${line};columnnumber=${character};code=${code};`; + return `##vso[task.logissue type=${severity};${properties}]${reason}\n`; } });