completions/grep.ps1

<#
 # grep completion
 #>

Import-Module NativeCommandCompleter.psm -ErrorAction SilentlyContinue

$msg = data { ConvertFrom-StringData @'
    grep = print lines that match patterns
    afterContext = Print NUM lines of trailing context
    text = Process binary file as text
    beforeContext = Print NUM lines of leading context
    context = Print NUM lines of context
    byteOffset = Print byte offset of matches
    binaryFiles = Assume data type for binary files
    color = Color output
    count = Only print number of matches
    devices = Action for devices
    directories = Action for devices
    extendedRegexp = Pattern is extended regexp
    regexp = Specify a pattern
    excludeFrom = Read pattern list from file. Skip files whose base name matches list
    excludeDir = Exclude matching directories from recursive searches
    fixedStrings = Pattern is a fixed string
    file = Use patterns from a file
    basicRegexp = Pattern is basic regex
    withFilename = Print filename
    noFilename = Suppress printing filename
    help = Display help and exit
    skipBinaryFiles = Skip binary files
    ignoreCase = Ignore case
    filesWithoutMatch = Print name of files without matches
    filesWithMatches = Print name of files with matches
    maxCount = Stop reading after NUM matches
    mmap = Use the mmap system call to read input
    lineNumber = Print line number
    onlyMatching = Show only matching part
    label = Rename stdin
    lineBuffered = Use line buffering
    perlRegexp = Pattern is a Perl regexp (PCRE) string
    quiet = Do not write anything
    dereferenceRecursive = Recursively read files under each directory, following symlinks
    recursive = Recursively read files under each directory
    include = Search only files matching PATTERN
    exclude = Skip files matching PATTERN
    noMessages = Suppress error messages
    initialTab = Ensure first character of actual line content lies on a tab stop
    binary = Treat files as binary
    unixByteOffsets = Report Unix-style byte offsets
    version = Display version and exit
    invertMatch = Invert the sense of matching
    wordRegexp = Only whole matching words
    lineRegexp = Only whole matching lines
    nullData = Treat input as a set of zero-terminated lines
    null = Output a zero byte after filename
    groupSeparator = Set a group separator
    noGroupSeparator = Use empty string as a group separator
'@
 }
Import-LocalizedData -BindingVariable localizedMessages -ErrorAction SilentlyContinue;
foreach ($key in $localizedMessages.Keys) { $msg[$key] = $localizedMessages[$key] }

Register-NativeCompleter -Name grep -Description $msg.grep -Parameters @(
    New-ParamCompleter -ShortName A -LongName after-context -Description $msg.afterContext -Arguments @{ Name = 'NUM' }
    New-ParamCompleter -ShortName a -LongName text -Description $msg.text
    New-ParamCompleter -ShortName B -LongName before-context -Description $msg.beforeContext -Arguments @{ Name = 'NUM' }
    New-ParamCompleter -ShortName C -LongName context -Description $msg.context -Arguments @{ Name = 'NUM' }
    New-ParamCompleter -ShortName b -LongName byte-offset -Description $msg.byteOffset
    New-ParamCompleter -LongName binary-files -Description $msg.binaryFiles -Arguments @{ Name = 'TYPE'; Candidates = "binnary`tBinary format", "text`tText format" }
    New-ParamCompleter -LongName color,colour -Description $msg.color -Arguments @{ Name = 'WHEN'; Nargs = '?'; Candidates = 'never','always','auto' }
    New-ParamCompleter -ShortName c -LongName count -Description $msg.count
    New-ParamCompleter -ShortName D -LongName devices -Description $msg.devices -Arguments @{ Name = 'ACTION'; Candidates = 'read', 'skip' }
    New-ParamCompleter -ShortName d -LongName directories -Description $msg.directories -Arguments @{ Name = 'ACTION'; Candidates = 'read', 'skip', 'recurse' }
    New-ParamCompleter -ShortName E -LongName extended-regexp -Description $msg.extendedRegexp
    New-ParamCompleter -ShortName e -LongName regexp -Description $msg.regexp -Arguments @{ Name = 'PATTERNS' }
    New-ParamCompleter -LongName exclude-from -Description $msg.excludeFrom -Arguments @{ Name = 'FILE'; Type = 'File' }
    New-ParamCompleter -LongName exclude-dir -Description $msg.excludeDir -Arguments @{ Name = 'GLOB' }
    New-ParamCompleter -ShortName F -LongName fixed-strings -Description $msg.fixedStrings
    New-ParamCompleter -ShortName f -LongName file -Description $msg.file -Arguments @{ Name = 'FILE'; Type = 'File' }
    New-ParamCompleter -ShortName G -LongName basic-regexp -Description $msg.basicRegexp
    New-ParamCompleter -ShortName H -LongName with-filename -Description $msg.withFilename
    New-ParamCompleter -ShortName h -LongName no-filename -Description $msg.noFilename
    New-ParamCompleter -LongName help -Description $msg.help
    New-ParamCompleter -ShortName I -Description $msg.skipBinaryFiles
    New-ParamCompleter -ShortName i -LongName ignore-case -Description $msg.ignoreCase
    New-ParamCompleter -ShortName L -LongName files-without-match -Description $msg.filesWithoutMatch
    New-ParamCompleter -ShortName l -LongName files-with-matches -Description $msg.filesWithMatches
    New-ParamCompleter -ShortName m -LongName max-count -Description $msg.maxCount -Arguments @{ Name = 'NUM' }
    New-ParamCompleter -LongName mmap -Description $msg.mmap
    New-ParamCompleter -ShortName n -LongName line-number -Description $msg.lineNumber
    New-ParamCompleter -ShortName o -LongName only-matching -Description $msg.onlyMatching
    New-ParamCompleter -LongName label -Description $msg.label -Arguments @{ Name = 'LABEL' }
    New-ParamCompleter -LongName line-buffered -Description $msg.lineBuffered
    New-ParamCompleter -ShortName P -LongName perl-regexp -Description $msg.perlRegexp
    New-ParamCompleter -ShortName q -LongName quiet, slient -Description $msg.quiet
    New-ParamCompleter -ShortName R -LongName dereference-recursive -Description $msg.dereferenceRecursive
    New-ParamCompleter -ShortName r -LongName recursive -Description $msg.recursive
    New-ParamCompleter -LongName include -Description $msg.include -Arguments @{ Name = 'GLOB' }
    New-ParamCompleter -LongName exclude -Description $msg.exclude -Arguments @{ Name = 'GLOB' }
    New-ParamCompleter -ShortName s -LongName no-messages -Description $msg.noMessages
    New-ParamCompleter -ShortName T -LongName initial-tab -Description $msg.initialTab
    New-ParamCompleter -ShortName U -LongName binary -Description $msg.binary
    New-ParamCompleter -ShortName u -LongName unix-byte-offsets -Description $msg.unixByteOffsets
    New-ParamCompleter -ShortName V -LongName version -Description $msg.version
    New-ParamCompleter -ShortName v -LongName invert-match -Description $msg.invertMatch
    New-ParamCompleter -ShortName w -LongName word-regexp -Description $msg.wordRegexp
    New-ParamCompleter -ShortName x -LongName line-regexp -Description $msg.lineRegexp
    New-ParamCompleter -ShortName z -LongName null-data -Description $msg.nullData
    New-ParamCompleter -ShortName Z -LongName null -Description $msg.null
    New-ParamCompleter -LongName group-separator -Description $msg.groupSeparator -Arguments @{ Name = 'SEP' }
    New-ParamCompleter -LongName no-group-separator -Description $msg.noGroupSeparator
) -Arguments @{
    Name = 'PATTERNS'
    Script =  {
        if ($this.BoundParameters.ContainsKey("regexp")) {
            [MT.Comp.Helper]::CompleteFilename($this);
        }
        else { $null }
    }
}, @{
    Name = 'FILLE'; Nargs = '1+'; Type = 'File'
}