mirror of
https://github.com/nvbn/thefuck.git
synced 2025-03-03 17:28:58 +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