@babel/code-frame

    1. import { codeFrameColumns } from "@babel/code-frame";
    2. const rawLines = `class Foo {
    3. constructor()
    4. }`;
    5. const location = { start: { line: 2, column: 16 } };
    6. const result = codeFrameColumns(rawLines, location, {
    7. /* options */
    8. console.log(result);

    You can also pass an end hash in location.

    1. import { codeFrameColumns } from "@babel/code-frame";
    2. const rawLines = `class Foo {
    3. constructor() {
    4. }
    5. }`;
    6. const location = {
    7. start: { line: 2, column: 17 },
    8. end: { line: 4, column: 3 },
    9. };
    10. const result = codeFrameColumns(rawLines, location, {
    11. /* options */
    12. });

    boolean, defaults to false.

    Toggles syntax highlighting the code as JavaScript for terminals.

    number, defaults to 2.

    number, defaults to 3.

    Adjust the number of lines to show below the error.

    , defaults to false.

    Enable this to forcibly syntax highlight the code as JavaScript (for non-terminals); overrides highlightCode.

    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.

    1. 1 | class Foo {
    2. > 2 | constructor()
    3. | ^ Missing {
    4. 3 | };

    Prior to version 7, the only API exposed by this module was for a single line and optional column pointer. The old API will now log a deprecation warning.

    The new API takes a location object, similar to what is available in an AST.

    This is an example of the deprecated (but still available) API:

    1. import { codeFrameColumns } from "@babel/code-frame";
    2. const rawLines = `class Foo {
    3. constructor() {
    4. console.log("hello");
    5. }
    6. }`;
    7. const location = { start: { line: 2, column: 16 } };
    8. const result = codeFrameColumns(rawLines, location, {
    9. /* options */
    10. });