Skip to content

Commit 4f52c24

Browse files
committed
Support multi letter sigils in FunctionNames
Refs #1124
1 parent d066fc0 commit 4f52c24

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

lib/credo/check/readability/function_names.ex

+19-2
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,21 @@ defmodule Credo.Check.Readability.FunctionNames do
149149
issues
150150
end
151151

152-
defp issues_for_name(name, args, meta, issues, issue_meta, allow_acronyms?) do
153-
if name |> to_string |> Name.snake_case?(allow_acronyms?) do
152+
defp issues_for_name("sigil_" <> sigil_letters = name, args, meta, issues, issue_meta, _allow_acronyms?) do
153+
multi_letter_sigil? = String.match?(sigil_letters, ~r/^[A-Z]+$/)
154+
155+
if multi_letter_sigil? do
156+
issues
157+
else
158+
issue = issue_for(issue_meta, meta[:line], name)
159+
arity = length(args || [])
160+
161+
add_issue(issues, name, arity, issue)
162+
end
163+
end
164+
165+
defp issues_for_name("" <> name, args, meta, issues, issue_meta, allow_acronyms?) do
166+
if Name.snake_case?(name, allow_acronyms?) do
154167
issues
155168
else
156169
issue = issue_for(issue_meta, meta[:line], name)
@@ -160,6 +173,10 @@ defmodule Credo.Check.Readability.FunctionNames do
160173
end
161174
end
162175

176+
defp issues_for_name(name, args, meta, issues, issue_meta, allow_acronyms?) do
177+
name |> to_string |> issues_for_name(args, meta, issues, issue_meta, allow_acronyms?)
178+
end
179+
163180
defp issue_for(issue_meta, line_no, trigger) do
164181
format_issue(
165182
issue_meta,

test/credo/check/readability/function_names_test.exs

+17
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,23 @@ defmodule Credo.Check.Readability.FunctionNamesTest do
7575
|> refute_issues()
7676
end
7777

78+
test "it should NOT report expected code for multi letter sigils /5" do
79+
"""
80+
def sigil_ZZO(input, args) do
81+
# ...
82+
end
83+
defmacro sigil_ZZU({:<<>>, _, [string]}, []) do
84+
# ...
85+
end
86+
defmacro sigil_ZZU({:<<>>, _, [string]}, []) when is_binary(string) do
87+
# ...
88+
end
89+
"""
90+
|> to_source_file
91+
|> run_check(@described_check)
92+
|> refute_issues()
93+
end
94+
7895
test "it should NOT report expected code (for operators) /6" do
7996
"""
8097
defmacro @expr2

0 commit comments

Comments
 (0)