help.ex (3746B)
1 defmodule Credo.CLI.Command.Help do 2 @moduledoc false 3 4 @ljust 12 5 @starting_order ~w(suggest explain) 6 @ending_order ~w(help) 7 8 alias Credo.CLI.Output.UI 9 alias Credo.CLI.Sorter 10 alias Credo.CLI.Switch 11 alias Credo.Execution 12 13 use Credo.CLI.Command, 14 short_description: "Show this help message", 15 cli_switches: [ 16 Switch.string("format"), 17 Switch.boolean("help", alias: :h) 18 ] 19 20 @doc false 21 def call(exec, _opts) do 22 print_banner() 23 print_message(exec) 24 25 exec 26 end 27 28 def print_banner do 29 banner() 30 |> String.split("") 31 |> Enum.flat_map(fn char -> [color_for(char), char_for(char)] end) 32 |> UI.puts() 33 34 UI.puts() 35 end 36 37 def print_message(exec) do 38 UI.puts("Credo Version #{Credo.version()}") 39 UI.puts(["Usage: ", :olive, "$ mix credo <command> [options]"]) 40 UI.puts("\nCommands:\n") 41 42 exec 43 |> Execution.get_valid_command_names() 44 |> Sorter.ensure(@starting_order, @ending_order) 45 |> Enum.each(fn name -> 46 module = Execution.get_command(exec, name) 47 48 padded_name = 49 name 50 |> to_string 51 |> String.pad_trailing(@ljust) 52 53 case module.short_description do 54 nil -> 55 UI.puts(" #{padded_name}") 56 57 short_description -> 58 UI.puts(" #{padded_name}#{short_description}") 59 end 60 end) 61 62 UI.puts("\nUse `--help` on any command to get further information.") 63 64 example = [ 65 "For example, `", 66 :olive, 67 "mix credo suggest --help", 68 :reset, 69 "` for help on the default command." 70 ] 71 72 UI.puts(example) 73 end 74 75 def color_for("#"), do: [:reset, :darkgreen] 76 def color_for(";"), do: [:reset, :faint, :green] 77 def color_for("~"), do: [:reset, :bright, :green] 78 def color_for(":"), do: [:reset, :faint, :yellow] 79 def color_for("="), do: [:reset, :bright, :yellow] 80 def color_for("-"), do: [:reset, :faint, :red] 81 def color_for("["), do: [:reset, :bright, :red] 82 def color_for("M"), do: [:reset, :blue] 83 def color_for(","), do: [:reset, :color235] 84 def color_for(_), do: [:reset, :white] 85 86 # ~w(▁ ▂ ▃ ▄ ▅ ▆ ▇ █) 87 88 def char_for(" "), do: " " 89 def char_for("\n"), do: "\n" 90 def char_for("#"), do: "▇" 91 def char_for(";"), do: "▇" 92 def char_for("~"), do: "▇" 93 def char_for(":"), do: "▇" 94 def char_for("="), do: "▇" 95 def char_for("-"), do: "▇" 96 def char_for("["), do: "▇" 97 def char_for("M"), do: "▇" 98 def char_for(","), do: "▅" 99 def char_for(v), do: v 100 101 def banner do 102 """ 103 104 ####################### ##### ### 105 #######################,,,,,#####,,, ### 106 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 107 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 108 ~~~~~~~~~~~~~~~~~,,,~~~~~~~~,,,~~~,,,,,,,,,,, 109 ;;;;;;~~~~~~~~~~~~~~~~~,,,~~~~~~~~,,,~~~,,,,,,,,,,, 110 ;;;;;;;;;;;;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 111 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 112 ::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 113 :::::===================,,,==========,,,==,,,,,,,,,,,,,,,, 114 ===================,,,==========,,,==,,,,,,,,,,,,,,,, 115 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 116 ----------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 117 -------[[[[[[[[[[[[[[[[[[[[[[[,,,[[,,,[[[[[[,,,,,,,,,, 118 [[[[[[[[[[[[[[[[[[[[[[[,,,[[,,,[[[[[[,,,,,,,,,, 119 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 120 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 121 MMMMMMMMMMMMMMMMMMMMMMM,,,,MMMMM,,,, MMM 122 MMMMMMMMMMMMMMMMMMMMMMM MMMMM MMM 123 """ 124 end 125 end