Add @babel/code-frame (#23817)

* Add @babel/code-frame

This is based on the definition for babel-code-frame, but adds the new codeFrameColumns method. See https://github.com/babel/babel/tree/master/packages/babel-code-frame for project documentation.

* Rename "Location" to "SourceLocation" to avoid confusion with DOM Location

* Update based on feedback
This commit is contained in:
Forbes Lindesay
2018-02-27 19:21:14 +00:00
committed by Andy
parent 58bc7a9ca4
commit 81260d4bd0
4 changed files with 100 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
import codeFrame, { codeFrameColumns } from "@babel/code-frame";
const code = `
const number = 1;
var string = 'foo';
function print(name: string) {
console.log(string + name);
}
`;
codeFrame(code, 5, 22);
codeFrame(code, 5, 22, { forceColor: true });
codeFrame(code, 2, 2, { highlightCode: true });
codeFrameColumns(code, { start: { line: 5, column: 22 } });
codeFrameColumns(
code,
{ start: { line: 5, column: 22 } },
{ forceColor: true }
);
codeFrameColumns(
code,
{ start: { line: 2, column: 2 } },
{ highlightCode: true }
);

54
types/babel__code-frame/index.d.ts vendored Normal file
View File

@@ -0,0 +1,54 @@
// Type definitions for @babel/code-frame 7.0
// Project: https://github.com/babel/babel/tree/master/packages/babel-code-frame
// Definitions by: Mohsen Azimi <https://github.com/mohsen1>
// Forbes Lindesay <https://github.com/ForbesLindesay>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
export interface SourceLocation {
start: { line: number; column?: number };
end?: { line: number; column?: number };
}
export function codeFrameColumns(
rawLines: string,
location: SourceLocation,
options?: BabelCodeFrameOptions
): string;
export interface BabelCodeFrameOptions {
/** Syntax highlight the code as JavaScript for terminals. default: false */
highlightCode?: boolean;
/** The number of lines to show above the error. default: 2 */
linesAbove?: number;
/** The number of lines to show below the error. default: 3 */
linesBelow?: number;
/**
* Forcibly syntax highlight the code as JavaScript (for non-terminals);
* overrides highlightCode.
* default: false
*/
forceColor?: boolean;
/**
* Pass in a string to be displayed inline (if possible) next to the
* highlighted location in the code. If it can't be positioned inline,
* it will be placed above the code frame.
* default: nothing
*/
message?: string;
}
/**
* Generate errors that contain a code frame that point to source locations.
*
* @param rawLines Raw lines to frame
* @param lineNumber Line number (1 indexed)
* @param colNumber Column number
* @param options Additional options
*
* @returns Framed code
*/
export default function codeFrame(
rawLines: string,
lineNumber: number,
colNumber: number,
options?: BabelCodeFrameOptions
): string;

View File

@@ -0,0 +1,19 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": ["es6"],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"baseUrl": "../",
"typeRoots": ["../"],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true,
"paths": {
"@babel/code-frame": ["babel__code-frame"]
}
},
"files": ["index.d.ts", "babel__code-frame-tests.ts"]
}

View File

@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }