diff --git a/package.json b/package.json index 4202b14552e..e3374bbf1f2 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "coverage": "rimraf coverage .nyc_output && nyc npm test" }, "dependencies": { - "babel-code-frame": "^6.22.0", + "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", @@ -47,7 +47,7 @@ "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" }, "devDependencies": { - "@types/babel-code-frame": "^6.20.0", + "@types/babel__code-frame": "^7.0.1", "@types/chai": "^3.5.0", "@types/diff": "^3.2.0", "@types/glob": "^5.0.30", diff --git a/src/formatters/codeFrameFormatter.ts b/src/formatters/codeFrameFormatter.ts index e1f490a873a..b46a96012b9 100644 --- a/src/formatters/codeFrameFormatter.ts +++ b/src/formatters/codeFrameFormatter.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import codeFrame = require("babel-code-frame"); +import { codeFrameColumns } from "@babel/code-frame"; import chalk from "chalk"; import { AbstractFormatter } from "../language/formatter/abstractFormatter"; @@ -76,11 +76,10 @@ export class Formatter extends AbstractFormatter { ruleName = chalk.gray(`(${ruleName})`); // Frame - const lineAndCharacter = failure.getStartPosition().getLineAndCharacter(); - const frame = codeFrame( + const { character: column, line } = failure.getStartPosition().getLineAndCharacter(); + const frame = codeFrameColumns( failure.getRawLines(), - lineAndCharacter.line + 1, // babel-code-frame is 1 index - lineAndCharacter.character, + { start: { line: line + 1, column } }, // babel-code-frame is 1 index { forceColor: chalk.enabled, highlightCode: true, diff --git a/test/formatters/codeFrameFormatterTests.ts b/test/formatters/codeFrameFormatterTests.ts index bb9bbd7e291..fa0c8cf7341 100644 --- a/test/formatters/codeFrameFormatterTests.ts +++ b/test/formatters/codeFrameFormatterTests.ts @@ -27,6 +27,7 @@ describe("CodeFrame Formatter", () => { let sourceFile: ts.SourceFile; let formatter: IFormatter; let colorsEnabled: boolean; + before(() => { colorsEnabled = chalk.enabled; const Formatter = TestUtils.getFormatter("codeFrame"); @@ -35,11 +36,11 @@ describe("CodeFrame Formatter", () => { }); after(() => { - (chalk as any).enabled = colorsEnabled; + chalk.enabled = colorsEnabled; }); it("formats failures with colors", () => { - (chalk as any).enabled = true; + chalk.enabled = true; const maxPosition = sourceFile.getFullWidth(); const failures = [ @@ -84,36 +85,36 @@ describe("CodeFrame Formatter", () => { const expectedResultColored = `formatters/codeFrameFormatter.test.ts \u001b[31mfirst failure\u001b[39m \u001b[90m(first-name)\u001b[39m - \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m { - \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m { - \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m - \u001b[90m 4 | \u001b[39m\u001b[0m + \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m\u001b[0m + \u001b[0m \u001b[90m 4 | \u001b[39m\u001b[0m \u001b[31mfull failure\u001b[39m \u001b[90m(full-name)\u001b[39m - \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m { - \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m { - \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m - \u001b[90m 4 | \u001b[39m\u001b[0m + \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m\u001b[0m + \u001b[0m \u001b[90m 4 | \u001b[39m\u001b[0m \u001b[33mwarning failure\u001b[39m \u001b[90m(warning-name)\u001b[39m - \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m { - \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m { - \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m - \u001b[90m 4 | \u001b[39m\u001b[0m - - \u001b[31m&<>'\" should be escaped\u001b[39m \u001b[90m(escape)\u001b[39m - \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m { - \u001b[90m | \u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m - \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m { - \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m - \u001b[90m 4 | \u001b[39m\u001b[0m + \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m\u001b[0m + \u001b[0m \u001b[90m 4 | \u001b[39m\u001b[0m + + \u001b[31m&<>\'" should be escaped\u001b[39m \u001b[90m(escape)\u001b[39m + \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 1 | \u001b[39mmodule \u001b[33mCodeFrameModule\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m | \u001b[39m \u001b[31m\u001b[1m^\u001b[22m\u001b[39m\u001b[0m + \u001b[0m \u001b[90m 2 | \u001b[39m \u001b[36mexport\u001b[39m \u001b[36mclass\u001b[39m \u001b[33mCodeFrameClass\u001b[39m {\u001b[0m + \u001b[0m \u001b[90m 3 | \u001b[39m private name\u001b[33m:\u001b[39m string\u001b[33m;\u001b[39m\u001b[0m + \u001b[0m \u001b[90m 4 | \u001b[39m\u001b[0m \u001b[31mlast failure\u001b[39m \u001b[90m(last-name)\u001b[39m - \u001b[0m \u001b[90m 7 | \u001b[39m } - \u001b[90m 8 | \u001b[39m } - \u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 9 | \u001b[39m} - \u001b[90m | \u001b[39m\u001b[31m\u001b[1m^\u001b[22m\u001b[39m - \u001b[90m 10 | \u001b[39m\u001b[0m + \u001b[0m \u001b[90m 7 | \u001b[39m }\u001b[0m + \u001b[0m \u001b[90m 8 | \u001b[39m }\u001b[0m + \u001b[0m\u001b[31m\u001b[1m>\u001b[22m\u001b[39m\u001b[90m 9 | \u001b[39m}\u001b[0m + \u001b[0m \u001b[90m | \u001b[39m\u001b[31m\u001b[1m^\u001b[22m\u001b[39m\u001b[0m + \u001b[0m \u001b[90m 10 | \u001b[39m\u001b[0m `;