mirror of
				https://github.com/nvbn/thefuck.git
				synced 2025-10-31 23:22:10 +00:00 
			
		
		
		
	added gcloud cli
This commit is contained in:
		
							
								
								
									
										63
									
								
								tests/rules/test_gcloud_cli.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								tests/rules/test_gcloud_cli.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | import pytest | ||||||
|  |  | ||||||
|  | from thefuck.rules.gcloud_cli import match, get_new_command | ||||||
|  | from thefuck.types import Command | ||||||
|  |  | ||||||
|  |  | ||||||
|  | no_suggestions = '''\ | ||||||
|  | ERROR: (gcloud) Command name argument expected. | ||||||
|  | ''' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | misspelled_command = '''\ | ||||||
|  | ERROR: (gcloud) Invalid choice: 'comute'. | ||||||
|  | Usage: gcloud [optional flags] <group | command> | ||||||
|  |   group may be           access-context-manager | ai-platform | alpha | app | | ||||||
|  |                          asset | auth | beta | bigtable | builds | components | | ||||||
|  |                          composer | compute | config | container | dataflow | | ||||||
|  |                          dataproc | datastore | debug | deployment-manager | | ||||||
|  |                          dns | domains | endpoints | filestore | firebase | | ||||||
|  |                          functions | iam | iot | kms | logging | ml | | ||||||
|  |                          ml-engine | organizations | projects | pubsub | redis | | ||||||
|  |                          resource-manager | scheduler | services | source | | ||||||
|  |                          spanner | sql | tasks | topic | ||||||
|  |   command may be         docker | feedback | help | info | init | version | ||||||
|  |  | ||||||
|  | For detailed information on this command and its flags, run: | ||||||
|  |   gcloud --help | ||||||
|  | ''' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | misspelled_subcommand = '''\ | ||||||
|  | ERROR: (gcloud.compute) Invalid choice: 'instance'. | ||||||
|  | Maybe you meant: | ||||||
|  |   gcloud compute instance-groups | ||||||
|  |   gcloud compute instance-templates | ||||||
|  |   gcloud compute instances | ||||||
|  |   gcloud compute target-instances | ||||||
|  |  | ||||||
|  | To search the help text of gcloud commands, run: | ||||||
|  |   gcloud help -- SEARCH_TERMS | ||||||
|  | ''' | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.mark.parametrize('command', [ | ||||||
|  |     Command('gcloud comute', misspelled_command), | ||||||
|  |     Command('gcloud compute instance list', misspelled_subcommand)]) | ||||||
|  | def test_match(command): | ||||||
|  |     assert match(command) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def test_not_match(): | ||||||
|  |     assert not match(Command('aws dynamodb invalid', no_suggestions)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @pytest.mark.parametrize('command, result', [ | ||||||
|  |     (Command('gcloud comute', misspelled_command), | ||||||
|  |      ['gcloud compute instances list']), | ||||||
|  |     (Command('gcloud compute instance list', misspelled_subcommand), | ||||||
|  |      ['gcloud compute instances list'])]) | ||||||
|  | def test_get_new_command(command, result): | ||||||
|  |     assert get_new_command(command) == result | ||||||
							
								
								
									
										17
									
								
								thefuck/rules/gcloud_cli.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								thefuck/rules/gcloud_cli.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | import re | ||||||
|  |  | ||||||
|  | from thefuck.utils import for_app, replace_argument | ||||||
|  |  | ||||||
|  | INVALID_CHOICE = "(?<=Invalid choice: ')(.*)(?=', maybe you meant:)" | ||||||
|  | OPTIONS = "^\\s*\\*\\s(.*)" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @for_app('gcloud') | ||||||
|  | def match(command): | ||||||
|  |     return "usage:" in command.output and "maybe you meant:" in command.output | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def get_new_command(command): | ||||||
|  |     mistake = re.search(INVALID_CHOICE, command.output).group(0) | ||||||
|  |     options = re.findall(OPTIONS, command.output, flags=re.MULTILINE) | ||||||
|  |     return [replace_argument(command.script, mistake, o) for o in options] | ||||||
		Reference in New Issue
	
	Block a user