zf

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

filename.ex (2006B)


      1 defmodule Credo.CLI.Filename do
      2   @moduledoc """
      3   This module can be used to handle filenames given at the command line.
      4   """
      5 
      6   @doc """
      7   Returns `true` if a given `filename` contains a pos_suffix.
      8 
      9       iex> Credo.CLI.Filename.contains_line_no?("lib/credo/sources.ex:39:8")
     10       true
     11 
     12       iex> Credo.CLI.Filename.contains_line_no?("lib/credo/sources.ex:39")
     13       true
     14 
     15       iex> Credo.CLI.Filename.contains_line_no?("lib/credo/sources.ex")
     16       false
     17   """
     18   def contains_line_no?(nil), do: false
     19 
     20   def contains_line_no?(filename) do
     21     count =
     22       filename
     23       |> String.split(":")
     24       |> Enum.count()
     25 
     26     if windows_path?(filename) do
     27       count == 3 || count == 4
     28     else
     29       count == 2 || count == 3
     30     end
     31   end
     32 
     33   @doc """
     34   Returns a suffix for a filename, which contains a line and column value.
     35 
     36       iex> Credo.CLI.Filename.pos_suffix(39, 8)
     37       ":39:8"
     38 
     39       iex> Credo.CLI.Filename.pos_suffix(39, nil)
     40       ":39"
     41 
     42   These are used in this way: lib/credo/sources.ex:39:8
     43   """
     44   def pos_suffix(nil, nil), do: ""
     45   def pos_suffix(line_no, nil), do: ":#{line_no}"
     46   def pos_suffix(line_no, column), do: ":#{line_no}:#{column}"
     47 
     48   @doc """
     49   Removes the pos_suffix for a filename.
     50 
     51       iex> Credo.CLI.Filename.remove_line_no_and_column("lib/credo/sources.ex:39:8")
     52       "lib/credo/sources.ex"
     53   """
     54   def remove_line_no_and_column(filename) do
     55     filename
     56     |> String.split(":")
     57     |> remove_line_no_and_column(windows_path?(filename))
     58   end
     59 
     60   defp remove_line_no_and_column(parts, true) do
     61     Enum.at(parts, 0) <> ":" <> Enum.at(parts, 1)
     62   end
     63 
     64   defp remove_line_no_and_column(parts, false) do
     65     List.first(parts)
     66   end
     67 
     68   defp windows_path?(path) do
     69     String.contains?(path, ":\/")
     70   end
     71 
     72   @doc """
     73   Adds a pos_suffix to a filename.
     74 
     75       iex> Credo.CLI.Filename.with("test/file.exs", %{:line_no => 1, :column => 2})
     76       "test/file.exs:1:2"
     77   """
     78   def with(filename, opts) do
     79     filename <> pos_suffix(opts[:line_no], opts[:column])
     80   end
     81 end