mirror of
https://github.com/nvbn/thefuck.git
synced 2025-01-18 12:06:04 +00:00
Add terraform 'no command' rule (#1317)
* Add terraform 'no command' rule * Feedback from PR Co-authored-by: Joseph Daniel <jdn@logpoint.com>
This commit is contained in:
parent
77627a3140
commit
ceeaeab94b
@ -332,6 +332,7 @@ following rules are enabled by default:
|
|||||||
* `switch_lang` – switches command from your local layout to en;
|
* `switch_lang` – switches command from your local layout to en;
|
||||||
* `systemctl` – correctly orders parameters of confusing `systemctl`;
|
* `systemctl` – correctly orders parameters of confusing `systemctl`;
|
||||||
* `terraform_init.py` – run `terraform init` before plan or apply;
|
* `terraform_init.py` – run `terraform init` before plan or apply;
|
||||||
|
* `terraform_no_command.py` – fixes unrecognized `terraform` commands;
|
||||||
* `test.py` – runs `py.test` instead of `test.py`;
|
* `test.py` – runs `py.test` instead of `test.py`;
|
||||||
* `touch` – creates missing directories before "touching";
|
* `touch` – creates missing directories before "touching";
|
||||||
* `tsuru_login` – runs `tsuru login` if not authenticated or session expired;
|
* `tsuru_login` – runs `tsuru login` if not authenticated or session expired;
|
||||||
|
27
tests/rules/test_terraform_no_command.py
Normal file
27
tests/rules/test_terraform_no_command.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import pytest
|
||||||
|
from thefuck.rules.terraform_no_command import match, get_new_command
|
||||||
|
from thefuck.types import Command
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script, output', [
|
||||||
|
('terraform appyl', 'Terraform has no command named "appyl". Did you mean "apply"?'),
|
||||||
|
('terraform destory', 'Terraform has no command named "destory". Did you mean "destroy"?')])
|
||||||
|
def test_match(script, output):
|
||||||
|
assert match(Command(script, output))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script, output', [
|
||||||
|
('terraform --version', 'Terraform v0.12.2'),
|
||||||
|
('terraform plan', 'No changes. Infrastructure is up-to-date.'),
|
||||||
|
('terraform apply', 'Apply complete! Resources: 0 added, 0 changed, 0 destroyed.'),
|
||||||
|
])
|
||||||
|
def test_not_match(script, output):
|
||||||
|
assert not match(Command(script, output))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script, output, new_command', [
|
||||||
|
('terraform appyl', 'Terraform has no command named "appyl". Did you mean "apply"?', 'terraform apply',),
|
||||||
|
('terraform destory --some-other-option', 'Terraform has no command named "destory". Did you mean "destroy"?', 'terraform destroy --some-other-option',),
|
||||||
|
])
|
||||||
|
def test_get_new_command(script, output, new_command):
|
||||||
|
assert get_new_command(Command(script, output)) == new_command
|
16
thefuck/rules/terraform_no_command.py
Normal file
16
thefuck/rules/terraform_no_command.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import re
|
||||||
|
from thefuck.utils import for_app
|
||||||
|
|
||||||
|
MISTAKE = r'(?<=Terraform has no command named ")([^"]+)(?="\.)'
|
||||||
|
FIX = r'(?<=Did you mean ")([^"]+)(?="\?)'
|
||||||
|
|
||||||
|
|
||||||
|
@for_app('terraform')
|
||||||
|
def match(command):
|
||||||
|
return re.search(MISTAKE, command.output) and re.search(FIX, command.output)
|
||||||
|
|
||||||
|
|
||||||
|
def get_new_command(command):
|
||||||
|
mistake = re.search(MISTAKE, command.output).group(0)
|
||||||
|
fix = re.search(FIX, command.output).group(0)
|
||||||
|
return command.script.replace(mistake, fix)
|
Loading…
Reference in New Issue
Block a user