12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # Copyright (c) 2014 Jason Jarrett
- #
- # Tab completion for the `gulp`
- #
- # Usage:
- #
- # To enable powershell <tab> completion for gulp you need to be running
- # at least PowerShell v3 or greater and add the below to your $PROFILE
- #
- # Invoke-Expression ((gulp --completion=powershell) -join [System.Environment]::NewLine)
- #
- #
- $gulp_completion_Process = {
- param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
- # Load up an assembly to read the gulpfile's sha1
- if(-not $global:GulpSHA1Managed) {
- [Reflection.Assembly]::LoadWithPartialName("System.Security") | out-null
- $global:GulpSHA1Managed = new-Object System.Security.Cryptography.SHA1Managed
- }
- # setup a global (in-memory) cache
- if(-not $global:GulpfileShaCache) {
- $global:GulpfileShaCache = @{};
- }
- $cache = $global:GulpfileShaCache;
- # Get the gulpfile's sha1
- $sha1gulpFile = (resolve-path gulpfile.js -ErrorAction Ignore | %{
- $file = [System.IO.File]::Open($_.Path, "open", "read")
- [string]::join('', ($global:GulpSHA1Managed.ComputeHash($file) | %{ $_.ToString("x2") }))
- $file.Dispose()
- })
- # lookup the sha1 for previously cached task lists.
- if($cache.ContainsKey($sha1gulpFile)){
- $tasks = $cache[$sha1gulpFile];
- } else {
- $tasks = (gulp --tasks-simple).split("`n");
- $cache[$sha1gulpFile] = $tasks;
- }
- $tasks |
- where { $_.startswith($commandName) }
- Sort-Object |
- foreach { New-Object System.Management.Automation.CompletionResult $_, $_, 'ParameterValue', ('{0}' -f $_) }
- }
- if (-not $global:options) {
- $global:options = @{
- CustomArgumentCompleters = @{};
- NativeArgumentCompleters = @{}
- }
- }
- $global:options['NativeArgumentCompleters']['gulp'] = $gulp_completion_Process
- $function:tabexpansion2 = $function:tabexpansion2 -replace 'End\r\n{','End { if ($null -ne $options) { $options += $global:options} else {$options = $global:options}'
|