Class: Rufio::CommandCompletion
- Inherits:
-
Object
- Object
- Rufio::CommandCompletion
- Defined in:
- lib/rufio/command_completion.rb
Overview
コマンド補完機能を提供するクラス
Instance Method Summary collapse
-
#common_prefix(input) ⇒ String
補完候補の共通プレフィックスを取得.
-
#complete(input) ⇒ Array<String>
コマンドの補完候補を取得.
-
#initialize(history = nil, command_mode = nil) ⇒ CommandCompletion
constructor
初期化.
Constructor Details
#initialize(history = nil, command_mode = nil) ⇒ CommandCompletion
初期化
9 10 11 12 13 |
# File 'lib/rufio/command_completion.rb', line 9 def initialize(history = nil, command_mode = nil) @command_mode = command_mode || CommandMode.new @shell_completion = ShellCommandCompletion.new @history = history end |
Instance Method Details
#common_prefix(input) ⇒ String
補完候補の共通プレフィックスを取得
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/rufio/command_completion.rb', line 59 def common_prefix(input) candidates = complete(input) # 候補がない場合は元の入力を返す return input if candidates.empty? # 候補が1つの場合はそのコマンド名を返す return candidates.first if candidates.size == 1 # 複数の候補がある場合、共通プレフィックスを計算 min_candidate = candidates.min max_candidate = candidates.max min_candidate.chars.zip(max_candidate.chars).each_with_index do |(char_min, char_max), index| return min_candidate[0...index] if char_min != char_max end # すべての文字が一致した場合は最小の候補を返す min_candidate end |
#complete(input) ⇒ Array<String>
コマンドの補完候補を取得
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rufio/command_completion.rb', line 18 def complete(input) # 入力が空の場合は内部コマンド + スクリプト + rakeタスクを返す if input.nil? || input.strip.empty? return @command_mode.available_commands.map(&:to_s) + script_candidates('') + rake_candidates('') end # シェルコマンド補完(!で始まる場合) if input.strip.start_with?('!') return complete_shell_command(input.strip) end # スクリプト補完(@で始まる場合) if input.strip.start_with?('@') return @command_mode.complete_script(input.strip) end # rakeタスク補完(rake:で始まる場合) if input.strip.start_with?('rake:') prefix = input.strip[5..-1] return @command_mode.complete_rake_task(prefix) end # 通常のコマンド補完(内部コマンド + rakeタスク) available_commands = @command_mode.available_commands.map(&:to_s) input_lower = input.downcase candidates = available_commands.select do |command| command.downcase.start_with?(input_lower) end # rakeタスクも候補に追加("r", "ra", "rak", "rake" 等にマッチ) rake_tasks = rake_candidates('') candidates += rake_tasks.select { |task| task.downcase.start_with?(input_lower) } candidates end |