zf

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

filter_map.ex (1718B)


      1 defmodule Dialyxir.FilterMap do
      2   @moduledoc """
      3   A counters holding warnings to be skipped.
      4 
      5   `:counters` points to a `Map` where the keys are warnings to be skipped and the value indicates
      6   how often the warning was skipped.
      7   """
      8   defstruct list_unused_filters?: false, unused_filters_as_errors?: false, counters: %{}
      9 
     10   @doc """
     11   Fill a `FilterMap` from an ignore file.
     12   """
     13   def from_file(ignore_file, list_unused_filters?, ignore_exit_status?) do
     14     filter_map = %__MODULE__{
     15       list_unused_filters?: list_unused_filters?,
     16       unused_filters_as_errors?: list_unused_filters? && !ignore_exit_status?
     17     }
     18 
     19     {ignore, _} =
     20       ignore_file
     21       |> File.read!()
     22       |> Code.eval_string()
     23 
     24     Enum.reduce(ignore, filter_map, fn skip, filter_map ->
     25       put_in(filter_map.counters[skip], 0)
     26     end)
     27   end
     28 
     29   @doc """
     30   Remove all non-allowed arguments from `args`.
     31   """
     32   def to_args(args) do
     33     Keyword.take(args, [:list_unused_filters, :ignore_exit_status])
     34   end
     35 
     36   @doc """
     37   Retrieve the filters from a `FilterMap`.
     38   """
     39   def filters(filter_map) do
     40     Map.keys(filter_map.counters)
     41   end
     42 
     43   @doc """
     44   Increase usage count of a filter in `FilterMap`.
     45   """
     46   def inc(filter_map, filter) do
     47     update_in(filter_map.counters[filter], &(&1 + 1))
     48   end
     49 
     50   @doc """
     51   List unused filters.
     52   """
     53   def unused_filters(filter_map) do
     54     filter_map.counters
     55     |> Enum.filter(&unused?/1)
     56     |> Enum.unzip()
     57     |> elem(0)
     58   end
     59 
     60   @doc """
     61   Determine if any filters were not used.
     62   """
     63   def unused_filters?(filter_map) do
     64     Enum.any?(filter_map.counters, &unused?/1)
     65   end
     66 
     67   @doc """
     68   Check if a `FilterMap` entry is unused.
     69   """
     70   def unused?({_filter, count}), do: count < 1
     71 end