special namespaces for phoenix and api_spec
This commit is contained in:
parent
9f4fe5485b
commit
b6eb7997f5
1 changed files with 35 additions and 4 deletions
|
@ -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
|
defmodule Credo.Check.Consistency.FileLocation do
|
||||||
@moduledoc false
|
@moduledoc false
|
||||||
|
|
||||||
|
@ -13,7 +16,15 @@ defmodule Credo.Check.Consistency.FileLocation do
|
||||||
"""
|
"""
|
||||||
@explanation [warning: @checkdoc]
|
@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.
|
# before use/alias expressions.
|
||||||
# credo:disable-for-next-line VBT.Credo.Check.Consistency.ModuleLayout
|
# credo:disable-for-next-line VBT.Credo.Check.Consistency.ModuleLayout
|
||||||
use Credo.Check, category: :warning, base_priority: :high
|
use Credo.Check, category: :warning, base_priority: :high
|
||||||
|
@ -81,11 +92,31 @@ defmodule Credo.Check.Consistency.FileLocation do
|
||||||
expected_file_base(parsed_path.root, main_module) <>
|
expected_file_base(parsed_path.root, main_module) <>
|
||||||
Path.extname(parsed_path.allowed)
|
Path.extname(parsed_path.allowed)
|
||||||
|
|
||||||
if expected_file == parsed_path.allowed,
|
cond do
|
||||||
do: :ok,
|
expected_file == parsed_path.allowed ->
|
||||||
else: {:error, main_module, expected_file}
|
: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
|
end
|
||||||
|
|
||||||
|
defp special_namespaces?(path), do: String.contains?(path, @special_namespaces)
|
||||||
|
|
||||||
defp parsed_path(relative_path, params) do
|
defp parsed_path(relative_path, params) do
|
||||||
parts = Path.split(relative_path)
|
parts = Path.split(relative_path)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue