| 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}'
 |