mirror of
https://github.com/nvbn/thefuck.git
synced 2025-03-19 00:58:56 +00:00
Add rule for ADB unknown commands
This commit is contained in:
parent
045c8ae76c
commit
207d64a41f
@ -158,6 +158,7 @@ pip3 install thefuck --upgrade
|
|||||||
The Fuck tries to match a rule for the previous command, creates a new command
|
The Fuck tries to match a rule for the previous command, creates a new command
|
||||||
using the matched rule and runs it. Rules enabled by default are as follows:
|
using the matched rule and runs it. Rules enabled by default are as follows:
|
||||||
|
|
||||||
|
* `adb_unknown_command` – fixes misspelled commands like `adb logcta`;
|
||||||
* `ag_literal` – adds `-Q` to `ag` when suggested;
|
* `ag_literal` – adds `-Q` to `ag` when suggested;
|
||||||
* `aws_cli` – fixes misspelled commands like `aws dynamdb scan`;
|
* `aws_cli` – fixes misspelled commands like `aws dynamdb scan`;
|
||||||
* `cargo` – runs `cargo build` instead of `cargo`;
|
* `cargo` – runs `cargo build` instead of `cargo`;
|
||||||
|
41
tests/rules/test_adb_unknown_command.py
Normal file
41
tests/rules/test_adb_unknown_command.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import pytest
|
||||||
|
from thefuck.rules.adb_unknown_command import match, get_new_command
|
||||||
|
from thefuck.types import Command
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def output():
|
||||||
|
return '''Android Debug Bridge version 1.0.31
|
||||||
|
|
||||||
|
-d - directs command to the only connected USB device
|
||||||
|
returns an error if more than one USB device is present.
|
||||||
|
-e - directs command to the only running emulator.
|
||||||
|
returns an error if more than one emulator is running.
|
||||||
|
-s <specific device> - directs command to the device or emulator with the given
|
||||||
|
serial number or qualifier. Overrides ANDROID_SERIAL
|
||||||
|
environment variable.
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script', [
|
||||||
|
('adb lgcat'),
|
||||||
|
('adb puhs')])
|
||||||
|
def test_match(output, script):
|
||||||
|
assert match(Command(script, output))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script', [
|
||||||
|
'git branch foo',
|
||||||
|
'abd push'])
|
||||||
|
def test_not_match(script):
|
||||||
|
assert not match(Command(script, ''))
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('script, new_command', [
|
||||||
|
('adb puhs test.bin /sdcard/test.bin', 'adb push test.bin /sdcard/test.bin'),
|
||||||
|
('adb -s 1111 logcta', 'adb -s 1111 logcat'),
|
||||||
|
('adb -p 666 pulll /sdcard/test.bin', 'adb -p 666 pull /sdcard/test.bin'),
|
||||||
|
('adb -d logcatt', 'adb -d logcat'),
|
||||||
|
('adb -e reboott', 'adb -e reboot')])
|
||||||
|
def test_get_new_command(script, output, new_command):
|
||||||
|
assert get_new_command(Command(script, output)) == new_command
|
28
thefuck/rules/adb_unknown_command.py
Normal file
28
thefuck/rules/adb_unknown_command.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from thefuck.utils import is_app, get_closest, replace_argument
|
||||||
|
|
||||||
|
|
||||||
|
# the most common ADB commands
|
||||||
|
_ADB_COMMANDS = [
|
||||||
|
'devices',
|
||||||
|
'install',
|
||||||
|
'logcat',
|
||||||
|
'pull',
|
||||||
|
'push',
|
||||||
|
'reboot',
|
||||||
|
'shell',
|
||||||
|
'uninstall'
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def match(command):
|
||||||
|
return (is_app(command, 'adb')
|
||||||
|
and command.output.startswith('Android Debug Bridge version'))
|
||||||
|
|
||||||
|
|
||||||
|
def get_new_command(command):
|
||||||
|
for idx, arg in enumerate(command.script_parts[1:]):
|
||||||
|
# allowed params to ADB are d/e/s/p where s and p take additional args
|
||||||
|
# for example 'adb -s 111 logcat' or 'adb -e logcat'
|
||||||
|
if not arg[0] == '-' and not command.script_parts[idx] in ('-s', '-p'):
|
||||||
|
adb_cmd = get_closest(arg, _ADB_COMMANDS)
|
||||||
|
return replace_argument(command.script, arg, adb_cmd)
|
Loading…
x
Reference in New Issue
Block a user