special namespaces for phoenix and api_spec

This commit is contained in:
Alexander Strizhakov 2020-06-24 13:56:16 +03:00
parent 9f4fe5485b
commit b6eb7997f5
No known key found for this signature in database
GPG key ID: 022896A53AEF1381

View file

@ -1,3 +1,6 @@
# Originally taken from
# https://github.com/VeryBigThings/elixir_common/blob/master/lib/vbt/credo/check/consistency/file_location.ex
defmodule Credo.Check.Consistency.FileLocation do
@moduledoc false
@ -13,7 +16,15 @@ defmodule Credo.Check.Consistency.FileLocation do
"""
@explanation [warning: @checkdoc]
# `use Credo.Check` required that module attributes are already defined, so we need to place these attributes
@special_namespaces [
"controllers",
"views",
"operations",
"channels"
]
# `use Credo.Check` required that module attributes are already defined, so we need
# to place these attributes
# before use/alias expressions.
# credo:disable-for-next-line VBT.Credo.Check.Consistency.ModuleLayout
use Credo.Check, category: :warning, base_priority: :high
@ -81,11 +92,31 @@ defp verify_module(main_module, relative_path, params) do
expected_file_base(parsed_path.root, main_module) <>
Path.extname(parsed_path.allowed)
if expected_file == parsed_path.allowed,
do: :ok,
else: {:error, main_module, expected_file}
cond do
expected_file == parsed_path.allowed ->
:ok
special_namespaces?(parsed_path.allowed) ->
original_path = parsed_path.allowed
namespace =
Enum.find(@special_namespaces, original_path, fn namespace ->
String.contains?(original_path, namespace)
end)
allowed = String.replace(original_path, "/" <> namespace, "")
if expected_file == allowed,
do: :ok,
else: {:error, main_module, expected_file}
true ->
{:error, main_module, expected_file}
end
end
defp special_namespaces?(path), do: String.contains?(path, @special_namespaces)
defp parsed_path(relative_path, params) do
parts = Path.split(relative_path)