space_helper.ex (4117B)
1 defmodule Credo.Check.Consistency.SpaceAroundOperators.SpaceHelper do 2 @moduledoc false 3 4 alias Credo.Code.Token 5 6 @doc """ 7 Returns true if there is no space before the operator (usually). 8 9 Examples: 10 x..-1 # .. is the operator here and there is usually no space before that 11 """ 12 def usually_no_space_before?({_, _, :^}, {_, _, :-}, _), do: true 13 def usually_no_space_before?({:identifier, _, _}, {_, _, :-}, _), do: false 14 def usually_no_space_before?({:number, _, _}, {_, _, :-}, _), do: false 15 def usually_no_space_before?({:int, _, _}, {_, _, :-}, _), do: false 16 def usually_no_space_before?({:float, _, _}, {_, _, :-}, _), do: false 17 def usually_no_space_before?({:flt, _, _}, {_, _, :-}, _), do: false 18 def usually_no_space_before?(_, {_, _, :-}, _), do: true 19 def usually_no_space_before?(_, {_, _, :..}, _), do: true 20 def usually_no_space_before?(_, {_, _, :"//"}, _), do: true 21 def usually_no_space_before?(_, _, _), do: false 22 23 @doc """ 24 Returns true if there is no space after the operator (usually). 25 26 Examples: 27 x..-1 # .. is the operator here and there is usually no space after that 28 """ 29 def usually_no_space_after?({:"(", _}, {:dual_op, _, :-}, {:identifier, _, _}), do: true 30 def usually_no_space_after?({:"(", _}, {:dual_op, _, :-}, {:number, _, _}), do: true 31 def usually_no_space_after?({:"(", _}, {:dual_op, _, :-}, {:int, _, _}), do: true 32 def usually_no_space_after?({:"(", _}, {:dual_op, _, :-}, {:float, _, _}), do: true 33 def usually_no_space_after?({:"(", _}, {:dual_op, _, :-}, {:flt, _, _}), do: true 34 def usually_no_space_after?({:"{", _}, {:dual_op, _, :-}, {:identifier, _, _}), do: true 35 def usually_no_space_after?({:"{", _}, {:dual_op, _, :-}, {:number, _, _}), do: true 36 def usually_no_space_after?({:"{", _}, {:dual_op, _, :-}, {:int, _, _}), do: true 37 def usually_no_space_after?({:"{", _}, {:dual_op, _, :-}, {:float, _, _}), do: true 38 def usually_no_space_after?({:"{", _}, {:dual_op, _, :-}, {:flt, _, _}), do: true 39 def usually_no_space_after?({:",", _}, {:dual_op, _, :-}, {:identifier, _, _}), do: true 40 def usually_no_space_after?({:",", _}, {:dual_op, _, :-}, {:number, _, _}), do: true 41 def usually_no_space_after?({:",", _}, {:dual_op, _, :-}, {:int, _, _}), do: true 42 def usually_no_space_after?({:",", _}, {:dual_op, _, :-}, {:float, _, _}), do: true 43 def usually_no_space_after?({:",", _}, {:dual_op, _, :-}, {:flt, _, _}), do: true 44 def usually_no_space_after?({_, _, :^}, {_, _, :-}, _), do: true 45 def usually_no_space_after?({_, _, :=}, {_, _, :-}, _), do: true 46 def usually_no_space_after?({_, _, :..}, {_, _, :-}, _), do: true 47 def usually_no_space_after?(_, {_, _, :-}, _), do: false 48 def usually_no_space_after?(_, {_, _, :..}, _), do: true 49 def usually_no_space_after?(_, {_, _, :"//"}, _), do: true 50 def usually_no_space_after?(_, _, _), do: false 51 52 def operator?({:comp_op, _, _}), do: true 53 def operator?({:comp_op2, _, _}), do: true 54 def operator?({:dual_op, _, _}), do: true 55 def operator?({:mult_op, _, _}), do: true 56 def operator?({:two_op, _, _}), do: true 57 def operator?({:concat_op, _, _}), do: true 58 def operator?({:ternary_op, _, _}), do: true 59 def operator?({:rel_op, _, _}), do: true 60 def operator?({:rel_op2, _, _}), do: true 61 def operator?({:and_op, _, _}), do: true 62 def operator?({:or_op, _, _}), do: true 63 def operator?({:match_op, _, _}), do: true 64 def operator?({:in_match_op, _, _}), do: true 65 def operator?({:stab_op, _, _}), do: true 66 def operator?({:pipe_op, _, _}), do: true 67 # Space around |> is ignored 68 def operator?({:arrow_op, _, _}), do: false 69 def operator?(_), do: false 70 71 def no_space_between?(arg1, arg2) do 72 {line_no, _col_start, _line_no_end, col_end} = Token.position(arg1) 73 {line_no2, col_start2, _line_no_end, _col_end} = Token.position(arg2) 74 75 line_no == line_no2 && col_end == col_start2 76 end 77 78 def space_between?(arg1, arg2) do 79 {line_no, _col_start, _line_no_end, col_end} = Token.position(arg1) 80 {line_no2, col_start2, _line_no_end, _col_end} = Token.position(arg2) 81 82 line_no == line_no2 && col_end < col_start2 83 end 84 end