62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| # 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}'
 |