Skip to content

Commit 43a17a3

Browse files
committed
Add typespecs for ExCSSModules
Could enhance typespec for `class/3` so the possible output will match `~s(class="#{class}"` and `class_selector/2` so the possible output will match `".#{class}"`.
1 parent 6b39870 commit 43a17a3

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

lib/ex_css_modules/ex_css_modules.ex

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ defmodule ExCSSModules do
55
alias __MODULE__
66
alias Phoenix.HTML
77

8+
@type key :: String.t() | atom()
9+
@type key_tuple :: {key, as_boolean(term())}
10+
811
@doc """
912
Reads a valid stylesheet definition. Returns a map if the stylesheet is
1013
already a map. Reads the file if the stylesheet is a string. Returns an empty
@@ -28,6 +31,7 @@ defmodule ExCSSModules do
2831
%{}
2932
3033
"""
34+
@spec stylesheet(String.t() | map()) :: map()
3135
def stylesheet(definition) when is_map(definition), do: definition
3236
def stylesheet(definition), do: read_stylesheet(definition)
3337

@@ -64,10 +68,14 @@ defmodule ExCSSModules do
6468
iex> class(%{ "hello" => "world"}, "hello", false)
6569
nil
6670
71+
iex> class(%{ "hello" => "world"}, "hello", nil)
72+
nil
73+
6774
iex> class(%{"hello" => "world"}, "foo")
6875
nil
6976
7077
"""
78+
@spec class(map(), key, as_boolean(term())) :: {:safe, iodata()} | nil
7179
def class(definition, keys, return_class? \\ true) do
7280
definition
7381
|> class_name(keys, return_class?)
@@ -125,6 +133,8 @@ defmodule ExCSSModules do
125133
nil
126134
127135
"""
136+
@spec class_name(map(), key | key_tuple | [key, ...] | [key_tuple, ...], as_boolean(term())) ::
137+
String.t() | nil
128138
def class_name(definition, key, return_class? \\ true)
129139

130140
def class_name(_, _, false), do: nil
@@ -177,6 +187,7 @@ defmodule ExCSSModules do
177187
".world.bar"
178188
179189
"""
190+
@spec class_selector(String.t() | map(), key | [key, ...]) :: String.t()
180191
def class_selector(definition, keys) when is_list(keys) do
181192
keys
182193
|> Enum.map(&class_selector(definition, &1))

0 commit comments

Comments
 (0)