From 46071b5c7a2e0c34e49c3cb8a0e792e86e18d5ea Mon Sep 17 00:00:00 2001 From: Guangcong Luo Date: Wed, 17 Feb 2021 07:52:41 -0800 Subject: [PATCH] Fix TypeScript error line/column (#125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix TypeScript error line/column * Adopt official pattern from VS Code * Minor cleanup * Add tests for tsc problem matcher Co-authored-by: Lukas Spieß --- .github/tsc.json | 13 +++++----- __tests__/installer.test.ts | 5 ---- __tests__/problem-matcher.test.ts | 43 +++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 __tests__/problem-matcher.test.ts diff --git a/.github/tsc.json b/.github/tsc.json index 5b0b664..7d8df56 100644 --- a/.github/tsc.json +++ b/.github/tsc.json @@ -4,14 +4,15 @@ "owner": "tsc", "pattern": [ { - "regexp": "^(?:\\s+\\d+\\>)?([^\\s].*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\)\\s*:\\s+(error|warning|info)\\s+(\\w{1,2}\\d+)\\s*:\\s*(.*)$", + "regexp": "^([^\\s].*)[\\(:](\\d+)[,:](\\d+)(?:\\):\\s+|\\s+-\\s+)(error|warning|info)\\s+TS(\\d+)\\s*:\\s*(.*)$", "file": 1, - "location": 2, - "severity": 3, - "code": 4, - "message": 5 + "line": 2, + "column": 3, + "severity": 4, + "code": 5, + "message": 6 } ] } ] -} \ No newline at end of file +} diff --git a/__tests__/installer.test.ts b/__tests__/installer.test.ts index 22ac3d6..4fe7577 100644 --- a/__tests__/installer.test.ts +++ b/__tests__/installer.test.ts @@ -8,15 +8,10 @@ import path from 'path'; import * as main from '../src/main'; import * as im from '../src/installer'; import * as auth from '../src/authutil'; -import {context} from '@actions/github'; let nodeTestManifest = require('./data/versions-manifest.json'); let nodeTestDist = require('./data/node-dist-index.json'); -// let matchers = require('../matchers.json'); -// let matcherPattern = matchers.problemMatcher[0].pattern[0]; -// let matcherRegExp = new RegExp(matcherPattern.regexp); - describe('setup-node', () => { let inputs = {} as any; let os = {} as any; diff --git a/__tests__/problem-matcher.test.ts b/__tests__/problem-matcher.test.ts new file mode 100644 index 0000000..4bcfdd1 --- /dev/null +++ b/__tests__/problem-matcher.test.ts @@ -0,0 +1,43 @@ +describe('problem matcher tests', () => { + it('tsc: matches TypeScript "pretty" error message', () => { + const [ + { + pattern: [{regexp}] + } + ] = require('../.github/tsc.json').problemMatcher; + const exampleErrorMessage = + "lib/index.js:23:42 - error TS2345: Argument of type 'A' is not assignable to parameter of type 'B'."; + + const match = exampleErrorMessage.match(new RegExp(regexp)); + expect(match).not.toBeNull(); + expect(match![1]).toEqual('lib/index.js'); + expect(match![2]).toEqual('23'); + expect(match![3]).toEqual('42'); + expect(match![4]).toEqual('error'); + expect(match![5]).toEqual('2345'); + expect(match![6]).toEqual( + "Argument of type 'A' is not assignable to parameter of type 'B'." + ); + }); + + it('tsc: matches TypeScript error message from log file', () => { + const [ + { + pattern: [{regexp}] + } + ] = require('../.github/tsc.json').problemMatcher; + const exampleErrorMessage = + "lib/index.js(23,42): error TS2345: Argument of type 'A' is not assignable to parameter of type 'B'."; + + const match = exampleErrorMessage.match(new RegExp(regexp)); + expect(match).not.toBeNull(); + expect(match![1]).toEqual('lib/index.js'); + expect(match![2]).toEqual('23'); + expect(match![3]).toEqual('42'); + expect(match![4]).toEqual('error'); + expect(match![5]).toEqual('2345'); + expect(match![6]).toEqual( + "Argument of type 'A' is not assignable to parameter of type 'B'." + ); + }); +});