Packages
styler
1.11.0
1.11.0
1.10.1
1.10.0
1.9.1
1.9.0
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
1.0.0-alpha.0
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.5
0.10.4
retired
0.10.3
0.10.2
0.10.1
0.10.0
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
retired
0.9.1
retired
0.9.0
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.1
0.1.0
A code-style enforcer that will just FIFY instead of complaining
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/inline_attributes.ex
# Copyright 2025 Adobe. All rights reserved.
# This file is licensed to you under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. You may obtain a copy
# of the License at http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software distributed under
# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
# OF ANY KIND, either express or implied. See the License for the specific language
# governing permissions and limitations under the License.
defmodule Mix.Tasks.Styler.InlineAttrs do
@shortdoc "EXPERIMENTAL: inlines module attributes with literal values that are only referenced once"
@moduledoc """
WARNING: EXPERIMENTAL | Inlines module attributes that are only referenced once in their module.
**This is known to create invalid code.** It's far from perfect.
It can still be a helpful first step in refactoring though.
Formats files with a currently hard-coded length of 122.
**Usage**:
mix styler.inline_attrs <file_path> [... additional file paths]
mix styler.inline_attrs path/to/my/file.ex path/to/another_file.ex
## Example:
# This ...
defmodule A do
@non_literal_attr Application.compile_env(...)
@literal_value_with_only_one_reference :my_key
def foo(), do: Application.get_env(:my_app, @literal_value_with_only_one_reference)
end
# Becomes this
defmodule A do
@non_literal_attr Application.compile_env(...)
def foo(), do: Application.get_env(:my_app, :my_key)
end
"""
use Mix.Task
alias Styler.Zipper
@impl Mix.Task
def run(files) do
for file <- files do
{ast, comments} = file |> File.read!() |> Styler.string_to_ast(file)
{{ast, _}, _} = ast |> Zipper.zip() |> Zipper.traverse_while(nil, &Styler.Style.InlineAttrs.run/2)
File.write!(file, Styler.ast_to_string(ast, comments))
end
end
end