zf

zenflows testing
git clone https://s.sonu.ch/~srfsh/zf.git
Log | Files | Refs | Submodules | README | LICENSE

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