mirror of
https://github.com/nvbn/thefuck.git
synced 2025-03-03 09:19:00 +00:00
added gcloud cli
This commit is contained in:
parent
6975d30818
commit
a4cb9f6909
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]
|
Loading…
x
Reference in New Issue
Block a user