API Documentation

JuliaFormatter.AlignGroupType
AlignGroup

Group of FST node indices and required metadata to potentially align them.

  • node_inds. Indices of FST nodes affected by alignment.
  • nodes. FST nodes affected by alignment.
  • line_offsets. Display line offset of the character nodes may be aligned to in the source file.
  • lens. Length of the FST node prior to the alignment character. Used to calculate extra whitespace padding.
  • whitespaces. Number of whitespaces between the alignment character and the prior FST node. If this is > 1 it signifies additional whitespace was manually added by the user since the formatter would only use 0 or 1 whitespaces.
source
JuliaFormatter.add_node!Method
add_node!(
    t::FST,
    n::FST,
    s::State;
    join_lines::Bool = false,
    max_padding::Int = -1,
    override_join_lines_based_on_source::Bool = false,
)

Appends n to t.

  • join_lines if false a NEWLINE node will be added and n will appear on the next line, otherwise it will appear on the same line as the previous node (when printing).
  • max_padding >= 0 indicates margin of t should be based on whether the margin of n + max_padding is greater than the current margin of t. Otherwise the margin n will be added to t.
  • override_join_lines_based_on_source is only used when join_lines_based_on_source option is true. In which n is added to t as if join_lines_based_on_source was false.
source
JuliaFormatter.align_binaryopcalls!Method
align_binaryopcalls!(doc::Document, fst::FST, op_inds::Vector{Int})

Aligns binary operator expressions.

Additionally handles the case where a keyword such as const is used prior to the binary op call. doc is used to compare source locations in display columns rather than raw source offsets.

source
JuliaFormatter.align_conditional!Method
align_conditional!(doc::Document, fst::FST)

Aligns a conditional expression.

doc supplies the original source text so ? and : alignment is computed using display columns.

source
JuliaFormatter.align_fst!Method
align_fst!(fst::FST, doc::Document, opts::Options)

Walk fst and apply the alignment passes enabled by opts.

doc is the original source document and is used to translate parser line offsets into display columns before padding is adjusted. This keeps alignment stable for source text containing combining and other zero-width characters.

source
JuliaFormatter.align_matrix!Method
align_matrix!(doc::Document, fst::FST)

Adjust whitespace between matrix elements so it matches the original source layout.

doc is used to recover the source display columns for each element, which avoids overpadding when the source contains zero-width characters.

source
JuliaFormatter.align_struct!Method
align_struct!(doc::Document, fst::FST)

Aligns struct fields.

doc supplies the original source text so field and type operator columns can be measured using display width.

source
JuliaFormatter.binaryop_to_whereop!Method
binaryop_to_whereop(fst::FST, s::State)

Handles the case of a function def defined as:

foo(a::A)::R where A = body

In this case instead of it being parsed as (1):

Binary
 - Where
 - OP
 - RHS

It's parsed as (2):

Binary
 - Binary
  - LHS
  - OP
  - Where
   - R
   - ...
 - OP
 - RHS

(1) is preferrable since it's the same parsed result as:

foo(a::A) where A = body

This transformation converts (2) to (1).

ref https://github.com/julia-vscode/CSTParser.jl/issues/93

source
JuliaFormatter.formatMethod
format(
    paths; # a path or collection of paths
    options...,
)::Bool

Recursively descend into files and directories, formatting any .jl, .md, .jmd, or .qmd files.

See format_file and format_text for a description of the options.

This function will look for .JuliaFormatter.toml in the location of the file being formatted, and searching up the file tree until a config file is (or isn't) found. When found, the configurations in the file will overwrite the given options. See Configuration File for more details.

Output

Returns a boolean indicating whether the file was already formatted (true) or not (false).

source
JuliaFormatter.format_fileMethod
format_file(
    filename::AbstractString;
    overwrite::Bool = true,
    verbose::Bool = false,
    format_markdown::Bool = false,
    format_options...,
)::Bool

Formats the contents of filename assuming it's a .jl, .md, .jmd or .qmd file.

See File Options for details on available options.

Output

Returns a boolean indicating whether the file was already formatted (true) or not (false).

source
JuliaFormatter.format_mdMethod
format_md(text::AbstractString; style::AbstractStyle = DefaultStyle(), kwargs...)

Normalizes the Markdown source and formats Julia code blocks.

See format_text for description of formatting options.

source
JuliaFormatter.format_textMethod
format_text(
    text::AbstractString;
    style::AbstractStyle = DefaultStyle(),
    indent::Int = 4,
    margin::Int = 92,
    options...,
)::String

Formats a Julia source passed in as a string, returning the formatted code as another string.

See Formatting Options for details on available options.

source
JuliaFormatter.is_iterable_argMethod

Returns whether fst can be an iterable argument. For example in the case of a function call, which is of type Call:

(a, b, c; k1=v1)

This would return true for a, b, c and k1=v1 and false for all other nodes.

source
JuliaFormatter.length_toMethod
length_to(x::FST, ntyps; start::Int = 1)

Returns the length to any node type in ntyps based off the start index.

source
JuliaFormatter.move_at_sign_to_the_endMethod
move_at_sign_to_the_end(fst::FST, s::State)

NOTE: Assumes fst is the caller name of a macrocall such as @macro or Module.@macro.

Moves @ to the last identifier.

Example:

@Module.macro

to

Module.@macro
source
JuliaFormatter.nest_if_over_margin!Method
nest_if_over_margin!(
    style,
    fst::FST,
    s::State,
    idx::Int;
    stop_idx::Union{Int,Nothing} = nothing,
)::Bool

Converts the node at idx to a NEWLINE if the current margin plus the additional margin from fst[idx:stop_idx-1] is greater than the allowed margin.

If stop_idx == nothing the range is fst[idx:end].

Returns whether nesting occurred.

source
JuliaFormatter.prepend_return!Method
prepend_return!(fst::FST, s::State)

Prepends return to the last expression of a block if applicable.

function foo()
    a = 2 * 3
    a / 3
end

to

function foo()
    a = 2 * 3
    return a / 3
end
source
JuliaFormatter.separate_kwargs_with_semicolon!Method
separate_kwargs_with_semicolon!(fst::FST)

Ensures keyword arguments are separated by a ";".

Examples

Replace "," with ";".

a = f(x, y = 3)

->

a = f(x; y = 3)

Move ";" to the prior to the first positional argument.

a = f(x = 1; y = 2)

->

a = f(; x = 1, y = 2)
source
JuliaFormatter.source_display_line_offsetMethod
source_display_line_offset(doc::Document, line::Int, line_offset::Int) -> Int

Convert a 1-based source line offset into a 1-based display column for line in doc.

line_offset follows the offsets recorded in the parsed source and therefore advances through the original text representation. Alignment, however, needs display width semantics so that combining marks and other zero-width codepoints do not consume extra padding. This helper measures the source line prefix with textwidth and returns the corresponding display column.

source
JuliaFormatter.unnestable_nodeMethod
unnestable_node(cst::JuliaSyntax.GreenNode)

cst is assumed to be a single child node. Returns true if the node is of the syntactic form {...}, [...], or (...).

source
JuliaFormatter.walkMethod
walk(f, fst::FST, s::State)

Walks fst calling f on each node.

In situations where descending further into a subtree is not desirable f should return a value other than nothing.

Note

This function mutates the State's (s) line_offset. If this is not desired you should save the value before calling this function and restore it after.

source
JuliaFormatter.Internal.format_to_stageFunction
JuliaFormatter.Internal.format_to_stage(
    stage::Symbol,
    text::AbstractString,
    [style=DefaultStyle(),]
    options...
)

Run formatting on a given string up until a certain stage, and return the output of that stage.

Available stages:

  • (:gn, :greennode, :parse): the output of the JuliaSyntax parser, which is a JuliaSyntax.GreenNode.

This is the only stage currently implemented, but more will be added in the future.

Tip

For a utility that is meant to be convenient to access, typing the full qualified name can be a bit of a hassle! If you are using this function a lot, you may want to use BasicAutoloads.jl to automatically import it, and possibly even with a shorter name. For example, you can add something like this to your ~/.julia/config/startup.jl:

if isinteractive()
    import BasicAutoloads
    BasicAutoloads.register_autoloads([
        ["fs"] => :(using JuliaFormatter.Internal: format_to_stage as fs),
    ])
end
source