From 4f52c24dba91cf886bca6c6d31828323c1ca70cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20F=C3=B6hring?= Date: Wed, 3 Apr 2024 17:49:47 +0000 Subject: [PATCH] Support multi letter sigils in FunctionNames Refs #1124 --- lib/credo/check/readability/function_names.ex | 21 +++++++++++++++++-- .../check/readability/function_names_test.exs | 17 +++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/credo/check/readability/function_names.ex b/lib/credo/check/readability/function_names.ex index e531159c9..c6e093782 100644 --- a/lib/credo/check/readability/function_names.ex +++ b/lib/credo/check/readability/function_names.ex @@ -149,8 +149,21 @@ defmodule Credo.Check.Readability.FunctionNames do issues end - defp issues_for_name(name, args, meta, issues, issue_meta, allow_acronyms?) do - if name |> to_string |> Name.snake_case?(allow_acronyms?) do + defp issues_for_name("sigil_" <> sigil_letters = name, args, meta, issues, issue_meta, _allow_acronyms?) do + multi_letter_sigil? = String.match?(sigil_letters, ~r/^[A-Z]+$/) + + if multi_letter_sigil? do + issues + else + issue = issue_for(issue_meta, meta[:line], name) + arity = length(args || []) + + add_issue(issues, name, arity, issue) + end + end + + defp issues_for_name("" <> name, args, meta, issues, issue_meta, allow_acronyms?) do + if Name.snake_case?(name, allow_acronyms?) do issues else issue = issue_for(issue_meta, meta[:line], name) @@ -160,6 +173,10 @@ defmodule Credo.Check.Readability.FunctionNames do end end + defp issues_for_name(name, args, meta, issues, issue_meta, allow_acronyms?) do + name |> to_string |> issues_for_name(args, meta, issues, issue_meta, allow_acronyms?) + end + defp issue_for(issue_meta, line_no, trigger) do format_issue( issue_meta, diff --git a/test/credo/check/readability/function_names_test.exs b/test/credo/check/readability/function_names_test.exs index 5f7c1b7e3..99144b224 100644 --- a/test/credo/check/readability/function_names_test.exs +++ b/test/credo/check/readability/function_names_test.exs @@ -75,6 +75,23 @@ defmodule Credo.Check.Readability.FunctionNamesTest do |> refute_issues() end + test "it should NOT report expected code for multi letter sigils /5" do + """ + def sigil_ZZO(input, args) do + # ... + end + defmacro sigil_ZZU({:<<>>, _, [string]}, []) do + # ... + end + defmacro sigil_ZZU({:<<>>, _, [string]}, []) when is_binary(string) do + # ... + end + """ + |> to_source_file + |> run_check(@described_check) + |> refute_issues() + end + test "it should NOT report expected code (for operators) /6" do """ defmacro @expr2