Packages

EditorConfig Core implementation for Elixir: parser, glob matcher, resolver, and CLI.

Current section

Files

Jump to
editorconfig_core lib editor_config properties.ex
Raw

lib/editor_config/properties.ex

defmodule EditorConfig.Properties do
@moduledoc "Optional typed helpers for resolved EditorConfig property maps."
@doc """
Reads `indent_size` as a positive integer or `:tab`.
## Examples
iex> EditorConfig.Properties.indent_size(%{"indent_size" => "2"})
{:ok, 2}
iex> EditorConfig.Properties.indent_size(%{"indent_size" => "tab"})
{:ok, :tab}
"""
@spec indent_size(map()) :: {:ok, pos_integer() | :tab} | :error
def indent_size(%{"indent_size" => "tab"}), do: {:ok, :tab}
def indent_size(%{"indent_size" => value}) do
case Integer.parse(value) do
{int, ""} when int > 0 -> {:ok, int}
_invalid -> :error
end
end
def indent_size(_props), do: :error
@doc """
Reads a case-insensitive boolean property.
## Examples
iex> EditorConfig.Properties.boolean(
...> %{"trim_trailing_whitespace" => "TRUE"},
...> "trim_trailing_whitespace"
...> )
{:ok, true}
"""
@spec boolean(map(), String.t()) :: {:ok, boolean()} | :error
def boolean(props, key) do
case Map.fetch(props, key) do
{:ok, value} -> parse_boolean(String.downcase(value))
:error -> :error
end
end
defp parse_boolean("true"), do: {:ok, true}
defp parse_boolean("false"), do: {:ok, false}
defp parse_boolean(_value), do: :error
end