ts-morph

Formatting

Sometimes you might encounter code that looks terrible. For example:

// BadlyFormattedFile.ts
var myVariable     :      string |    number;
function myFunction(param    : string){
return "";
}

Automatically format the text of this file by calling format text on it:

sourceFile.formatText();
// or provide optional formatting settings
sourceFile.formatText({
    placeOpenBraceOnNewLineForFunctions: true
});

This will run the source file's text through the TypeScript compiler's formatting API, which will change the source file to contain the following text:

// BadlyFormattedFile.ts (not anymore!)
var myVariable: string | number;
function myFunction(param: string) {
    return "";
}

Individual Nodes

Individual nodes can also be formatted. For example, say you have a file that looks like this:

// file.ts
export class MyClass {
    prop  !  : string   ;

    myMethod(    example: string    ) {
  console.log(    example    );
    }
}

You can select down to the specific node you want to format:

project.getSourceFileOrThrow("file.ts")
    .getClassOrThrow("MyClass")
    .getInstanceMethodOrThrow("myMethod")
    .getStatements()[0]
    .formatText();

Which would selectively only format the first statement in the method:

// file.ts
export class MyClass {
    prop  !  : string   ;

    myMethod(    example: string    ) {
        console.log(example);
    }
}