This is such a good idea. I do this a lot too and didn't think of it, 
especially in library code. In strong support.

On Wed, Jan 07, 2026 at 12:22 PM, Christopher Keele < [email protected] > 
wrote:

> 
> *Proposal:*
> 
> 
> * Add support for indenting multi-line strings via *String.indent* :
> *defmodule String do*
> *@ type indentation ::*
> *binary*
> *| Inspect. Algebra. t ()*
> *| [{ :spaces , non_neg_integer ()}]*
> *| [{ :tabs , non_neg_integer ()}]*
> *
> *
> *@ spec indent ( String. t (), indentation ) :: String. t ()*
> *def indent ( string , indentation )*
> *end*
> 
> * Add support for indenting ast representations in *Macro.to_string* :
> defmodule Macro do
> @ type to_string_opt :: { :indent , String. indentation ()}
> 
> @ spec to_string ( Macro. t (), [ to_string_opt ()]) :: String. t ()
> def to_string ( string , options \\ [])
> def to_string ( string , options )
> end
> 
> 
> * 
> Add support for indenting code in *Code.format_string!* :
> defmodule Code do
> @ type format_opt ::
> # ... |
> { :indent , String. indentation ()}
> 
> @ spec format_string! ( String. t (), [ format_opt ()]) :: iodata ()
> def format_string! ( string , opts \\ [])
> end
> 
> * 
> Add support for indenting arbitrary Algebra documents in *Inspect.Opts* :
> defmodule Inspect.Opts do
> @ t new_opt ::
> # ... |
> { :indent , String. indentation ()}
> end
> 
> *Motivation:*
> 
> 
> I often want to indent code I provide as feedback to the user in exception
> messages in macros. I have to imagine other library authors,
> metaprogrammers, and LS developers would benefit as well.
> 
> 
> I often want to compose multi-line log messages with certain passages
> indented. I have to imagine other application developers have wanted the
> same.
> 
> 
> Please share if you can think of other ways you would use this
> functionality, or other stdlib APIs you can think of wanting indentation
> support for!
> 
> 
> *Rationale:*
> 
> 
> I find myself re-implementing this odd job often, not just for my stated
> use-cases here. The arguments for putting it in stlib are:
> * The String utility is general-purpose enough for many use-cases, and so
> is potentially useful to many Elixir users.
> * We can provide a better implementation than the naive *String.split |>
> Kernel.<> |> Enum.join*.
> * We can provide an implementation that works with Inspect.Algebra
> documents and inspect.
> * We can provide an option to *Macro.to_string* and *Code.format_string!* 
> where
> displaying multi-line strings is common.
> 
> 
> 
> 
> 
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to elixir-lang-core+unsubscribe@ googlegroups. com (
> [email protected] ).
> To view this discussion visit https:/ / groups. google. com/ d/ msgid/ 
> elixir-lang-core/
> f9b60654-29b2-4c06-80ea-6a6fa614f9d3n%40googlegroups. com (
> https://groups.google.com/d/msgid/elixir-lang-core/f9b60654-29b2-4c06-80ea-6a6fa614f9d3n%40googlegroups.com?utm_medium=email&utm_source=footer
> ).
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/elixir-lang-core/mk4q396z.7bef578b-059a-4f47-9bbe-f8485fa3ecdc%40we.are.superhuman.com.

Reply via email to