#compdef ninja
# Copyright 2011 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Add the following to your .zshrc to tab-complete ninja targets
#   . path/to/ninja/misc/zsh-completion

__get_targets() {
  ninja -t targets 2>/dev/null | while read -r a b; do echo $a | cut -d ':' -f1; done;
}

__get_tools() {
  ninja -t list 2>/dev/null | while read -r a b; do echo $a; done | tail -n +2
}

__get_modes() {
  ninja -d list 2>/dev/null | while read -r a b; do echo $a; done | tail -n +2 | head -n -1
}

__modes() {
  local -a modes
  modes=(${(fo)"$(__get_modes)"})
  _describe 'modes' modes
}

__tools() {
  local -a tools
  tools=(${(fo)"$(__get_tools)"})
  _describe 'tools' tools
}

__targets() {
  local -a targets
  targets=(${(fo)"$(__get_targets)"})
  _describe 'targets' targets
}

_arguments \
  {-h,--help}'[Show help]' \
  '--version[Print ninja version]' \
  '-C+[Change to directory before doing anything else]:directories:_directories' \
  '-f+[Specify input build file (default=build.ninja)]:files:_files' \
  '-j+[Run N jobs in parallel (default=number of CPUs available)]:number of jobs' \
  '-l+[Do not start new jobs if the load average is greater than N]:number of jobs' \
  '-k+[Keep going until N jobs fail (default=1)]:number of jobs' \
  '-n[Dry run (do not run commands but act like they succeeded)]' \
  '-v[Show all command lines while building]' \
  '-d+[Enable debugging (use -d list to list modes)]:modes:__modes' \
  '-t+[Run a subtool (use -t list to list subtools)]:tools:__tools' \
  '*::targets:__targets'

