From df4d2cc88d315a8caed168bc84b02ad763b9f858 Mon Sep 17 00:00:00 2001 From: nvbn Date: Mon, 7 Sep 2015 13:00:29 +0300 Subject: [PATCH] =?UTF-8?q?=E2=9A=A0=EF=B8=8F=20Remove=20`settings`=20para?= =?UTF-8?q?m=20from=20rules=20`match`,=20`get=5Fnew=5Fcommand`=20and=20`si?= =?UTF-8?q?de=5Feffect`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 ++-- tests/rules/test_apt_get.py | 10 +-- tests/rules/test_apt_get_search.py | 6 +- tests/rules/test_brew_install.py | 6 +- tests/rules/test_brew_unknown_command.py | 10 +-- tests/rules/test_brew_upgrade.py | 4 +- tests/rules/test_cargo_no_command.py | 4 +- tests/rules/test_cd_mkdir.py | 6 +- tests/rules/test_cd_parent.py | 6 +- tests/rules/test_composer_not_command.py | 13 ++-- tests/rules/test_cp_omitting_directory.py | 6 +- tests/rules/test_dirty_untar.py | 6 +- tests/rules/test_dirty_unzip.py | 6 +- tests/rules/test_django_south_ghost.py | 12 ++-- tests/rules/test_django_south_merge.py | 12 ++-- tests/rules/test_docker_not_command.py | 6 +- tests/rules/test_dry.py | 4 +- tests/rules/test_fix_alt_space.py | 8 +-- tests/rules/test_fix_file.py | 14 ++--- tests/rules/test_git_add.py | 6 +- tests/rules/test_git_branch_delete.py | 8 +-- tests/rules/test_git_branch_list.py | 12 ++-- tests/rules/test_git_checkout.py | 6 +- tests/rules/test_git_diff_staged.py | 6 +- tests/rules/test_git_fix_stash.py | 4 +- tests/rules/test_git_not_command.py | 18 +++--- tests/rules/test_git_pull.py | 8 +-- tests/rules/test_git_pull_clone.py | 4 +- tests/rules/test_git_push.py | 8 +-- tests/rules/test_git_push_force.py | 6 +- tests/rules/test_git_push_pull.py | 6 +- tests/rules/test_git_stash.py | 6 +- tests/rules/test_go_run.py | 4 +- tests/rules/test_grep_recursive.py | 6 +- tests/rules/test_gulp_not_task.py | 6 +- tests/rules/test_has_exists_script.py | 13 ++-- tests/rules/test_heroku_not_command.py | 6 +- tests/rules/test_history.py | 6 +- tests/rules/test_java.py | 4 +- tests/rules/test_javac.py | 4 +- tests/rules/test_lein_not_task.py | 8 +-- tests/rules/test_ls_lah.py | 16 ++--- tests/rules/test_man.py | 6 +- tests/rules/test_man_no_space.py | 6 +- tests/rules/test_mercurial.py | 6 +- tests/rules/test_mkdir_p.py | 6 +- tests/rules/test_mvn_no_command.py | 6 +- .../rules/test_mvn_unknown_lifecycle_phase.py | 6 +- tests/rules/test_no_command.py | 14 ++--- tests/rules/test_no_such_file.py | 6 +- tests/rules/test_open.py | 4 +- tests/rules/test_pacman.py | 10 +-- tests/rules/test_pacman_not_found.py | 8 +-- tests/rules/test_pip_unknown_command.py | 9 ++- tests/rules/test_python_command.py | 6 +- tests/rules/test_python_execute.py | 4 +- tests/rules/test_quotation_marks.py | 4 +- tests/rules/test_rm_dir.py | 6 +- tests/rules/test_rm_root.py | 6 +- tests/rules/test_sed_unterminated_s.py | 20 +++--- tests/rules/test_sl_ls.py | 6 +- tests/rules/test_ssh_known_host.py | 18 +++--- tests/rules/test_sudo.py | 6 +- tests/rules/test_switch_lang.py | 6 +- tests/rules/test_systemctl.py | 18 +++--- tests/rules/test_tmux.py | 4 +- tests/rules/test_tsuru_login.py | 6 +- tests/rules/test_tsuru_not_command.py | 6 +- tests/rules/test_unknown_command.py | 6 +- tests/rules/test_vagrant_up.py | 6 +- tests/rules/test_whois.py | 6 +- tests/specific/test_git.py | 10 +-- tests/specific/test_sudo.py | 4 +- tests/test_corrector.py | 18 +++--- tests/test_utils.py | 63 ++++++++++++++++--- thefuck/corrector.py | 5 +- thefuck/main.py | 3 +- thefuck/rules/apt_get.py | 4 +- thefuck/rules/apt_get_search.py | 4 +- thefuck/rules/brew_install.py | 4 +- thefuck/rules/brew_unknown_command.py | 4 +- thefuck/rules/brew_upgrade.py | 4 +- thefuck/rules/cargo.py | 4 +- thefuck/rules/cargo_no_command.py | 4 +- thefuck/rules/cd_correction.py | 6 +- thefuck/rules/cd_mkdir.py | 4 +- thefuck/rules/cd_parent.py | 4 +- thefuck/rules/composer_not_command.py | 4 +- thefuck/rules/cp_omitting_directory.py | 4 +- thefuck/rules/cpp11.py | 4 +- thefuck/rules/dirty_untar.py | 6 +- thefuck/rules/dirty_unzip.py | 6 +- thefuck/rules/django_south_ghost.py | 4 +- thefuck/rules/django_south_merge.py | 4 +- thefuck/rules/docker_not_command.py | 4 +- thefuck/rules/dry.py | 4 +- thefuck/rules/fix_alt_space.py | 4 +- thefuck/rules/fix_file.py | 7 ++- thefuck/rules/git_add.py | 4 +- thefuck/rules/git_branch_delete.py | 4 +- thefuck/rules/git_branch_list.py | 4 +- thefuck/rules/git_checkout.py | 4 +- thefuck/rules/git_diff_staged.py | 4 +- thefuck/rules/git_fix_stash.py | 4 +- thefuck/rules/git_not_command.py | 4 +- thefuck/rules/git_pull.py | 4 +- thefuck/rules/git_pull_clone.py | 4 +- thefuck/rules/git_push.py | 4 +- thefuck/rules/git_push_force.py | 4 +- thefuck/rules/git_push_pull.py | 4 +- thefuck/rules/git_stash.py | 4 +- thefuck/rules/go_run.py | 4 +- thefuck/rules/grep_recursive.py | 4 +- thefuck/rules/gulp_not_task.py | 4 +- thefuck/rules/has_exists_script.py | 4 +- thefuck/rules/heroku_not_command.py | 4 +- thefuck/rules/history.py | 4 +- thefuck/rules/java.py | 4 +- thefuck/rules/javac.py | 4 +- thefuck/rules/lein_not_task.py | 4 +- thefuck/rules/ls_lah.py | 4 +- thefuck/rules/man.py | 4 +- thefuck/rules/man_no_space.py | 4 +- thefuck/rules/mercurial.py | 4 +- thefuck/rules/mkdir_p.py | 4 +- thefuck/rules/mvn_no_command.py | 4 +- thefuck/rules/mvn_unknown_lifecycle_phase.py | 4 +- thefuck/rules/no_command.py | 4 +- thefuck/rules/no_such_file.py | 4 +- thefuck/rules/open.py | 4 +- thefuck/rules/pacman.py | 4 +- thefuck/rules/pacman_not_found.py | 4 +- thefuck/rules/pip_unknown_command.py | 4 +- thefuck/rules/python_command.py | 4 +- thefuck/rules/python_execute.py | 4 +- thefuck/rules/quotation_marks.py | 4 +- thefuck/rules/rm_dir.py | 4 +- thefuck/rules/rm_root.py | 4 +- thefuck/rules/sed_unterminated_s.py | 4 +- thefuck/rules/sl_ls.py | 4 +- thefuck/rules/ssh_known_hosts.py | 6 +- thefuck/rules/sudo.py | 4 +- thefuck/rules/switch_lang.py | 4 +- thefuck/rules/systemctl.py | 4 +- thefuck/rules/test.py.py | 4 +- thefuck/rules/tmux.py | 4 +- thefuck/rules/tsuru_login.py | 4 +- thefuck/rules/tsuru_not_command.py | 4 +- thefuck/rules/unknown_command.py | 4 +- thefuck/rules/vagrant_up.py | 4 +- thefuck/rules/whois.py | 4 +- thefuck/specific/git.py | 4 +- thefuck/specific/sudo.py | 7 +-- thefuck/utils.py | 36 ++++++++--- 154 files changed, 535 insertions(+), 465 deletions(-) diff --git a/README.md b/README.md index 593ca5f66..f24018ebc 100644 --- a/README.md +++ b/README.md @@ -226,20 +226,21 @@ For adding your own rule you should create `your-rule-name.py` in `~/.thefuck/rules`. The rule should contain two functions: ```python -match(command: Command, settings: Settings) -> bool -get_new_command(command: Command, settings: Settings) -> str | list[str] +match(command: Command) -> bool +get_new_command(command: Command) -> str | list[str] ``` Also the rule can contain an optional function ```python -side_effect(old_command: Command, fixed_command: str, settings: Settings) -> None +side_effect(old_command: Command, fixed_command: str) -> None ``` and optional `enabled_by_default`, `requires_output` and `priority` variables. `Command` has three attributes: `script`, `stdout` and `stderr`. -`Settings` is a special object filled with `~/.thefuck/settings.py` and values from env ([see more below](#settings)). +*Rules api changed in 3.0:* For accessing settings in rule you need to import it with `from thefuck.conf import settings`. +`settings` is a special object filled with `~/.thefuck/settings.py` and values from env ([see more below](#settings)). Simple example of the rule for running script with `sudo`: @@ -264,7 +265,8 @@ requires_output = True ``` [More examples of rules](https://github.com/nvbn/thefuck/tree/master/thefuck/rules), -[utility functions for rules](https://github.com/nvbn/thefuck/tree/master/thefuck/utils.py). +[utility functions for rules](https://github.com/nvbn/thefuck/tree/master/thefuck/utils.py), +[app/os-specific helpers](https://github.com/nvbn/thefuck/tree/master/thefuck/specific/). ## Settings diff --git a/tests/rules/test_apt_get.py b/tests/rules/test_apt_get.py index ca2d95d95..f03627954 100644 --- a/tests/rules/test_apt_get.py +++ b/tests/rules/test_apt_get.py @@ -11,7 +11,7 @@ @pytest.mark.parametrize('command', [ Command(script='vim', stderr='vim: command not found')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, return_value', [ @@ -24,7 +24,7 @@ def test_match(command): def test_match_mocked(cmdnf_mock, command, return_value): get_packages = Mock(return_value=return_value) cmdnf_mock.CommandNotFound.return_value = Mock(getPackages=get_packages) - assert match(command, None) + assert match(command) assert cmdnf_mock.CommandNotFound.called assert get_packages.called @@ -32,7 +32,7 @@ def test_match_mocked(cmdnf_mock, command, return_value): @pytest.mark.parametrize('command', [ Command(script='vim', stderr=''), Command()]) def test_not_match(command): - assert not match(command, None) + assert not match(command) # python-commandnotfound is available in ubuntu 14.04+ @@ -44,7 +44,7 @@ def test_not_match(command): (Command('sudo vim'), 'sudo apt-get install vim && sudo vim'), (Command('sudo convert'), 'sudo apt-get install imagemagick && sudo convert')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command @pytest.mark.parametrize('command, new_command, return_value', [ @@ -63,4 +63,4 @@ def test_get_new_command(command, new_command): def test_get_new_command_mocked(cmdnf_mock, command, new_command, return_value): get_packages = Mock(return_value=return_value) cmdnf_mock.CommandNotFound.return_value = Mock(getPackages=get_packages) - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_apt_get_search.py b/tests/rules/test_apt_get_search.py index 82f3d0418..f90744853 100644 --- a/tests/rules/test_apt_get_search.py +++ b/tests/rules/test_apt_get_search.py @@ -4,7 +4,7 @@ def test_match(): - assert match(Command('apt-get search foo'), None) + assert match(Command('apt-get search foo')) @pytest.mark.parametrize('command', [ @@ -18,8 +18,8 @@ def test_match(): Command('apt-get update') ]) def test_not_match(command): - assert not match(command, None) + assert not match(command) def test_get_new_command(): - assert get_new_command(Command('apt-get search foo'), None) == 'apt-cache search foo' + assert get_new_command(Command('apt-get search foo')) == 'apt-cache search foo' diff --git a/tests/rules/test_brew_install.py b/tests/rules/test_brew_install.py index e8eae8654..de6ad21de 100644 --- a/tests/rules/test_brew_install.py +++ b/tests/rules/test_brew_install.py @@ -28,9 +28,9 @@ def _is_not_okay_to_test(): def test_match(brew_no_available_formula, brew_already_installed, brew_install_no_argument): assert match(Command('brew install elsticsearch', - stderr=brew_no_available_formula), None) + stderr=brew_no_available_formula)) assert not match(Command('brew install git', - stderr=brew_already_installed), None) + stderr=brew_already_installed)) assert not match(Command('brew install', stderr=brew_install_no_argument), None) @@ -39,7 +39,7 @@ def test_match(brew_no_available_formula, brew_already_installed, reason='No need to run if there\'s no formula') def test_get_new_command(brew_no_available_formula): assert get_new_command(Command('brew install elsticsearch', - stderr=brew_no_available_formula), None)\ + stderr=brew_no_available_formula))\ == 'brew install elasticsearch' assert get_new_command(Command('brew install aa', diff --git a/tests/rules/test_brew_unknown_command.py b/tests/rules/test_brew_unknown_command.py index 42e6c7f83..45e02f67d 100644 --- a/tests/rules/test_brew_unknown_command.py +++ b/tests/rules/test_brew_unknown_command.py @@ -15,15 +15,15 @@ def brew_unknown_cmd2(): def test_match(brew_unknown_cmd): - assert match(Command('brew inst', stderr=brew_unknown_cmd), None) + assert match(Command('brew inst', stderr=brew_unknown_cmd)) for command in _brew_commands(): - assert not match(Command('brew ' + command), None) + assert not match(Command('brew ' + command)) def test_get_new_command(brew_unknown_cmd, brew_unknown_cmd2): - assert get_new_command(Command('brew inst', stderr=brew_unknown_cmd), - None) == ['brew list', 'brew install', 'brew uninstall'] + assert get_new_command(Command('brew inst', stderr=brew_unknown_cmd)) \ + == ['brew list', 'brew install', 'brew uninstall'] - cmds = get_new_command(Command('brew instaa', stderr=brew_unknown_cmd2), None) + cmds = get_new_command(Command('brew instaa', stderr=brew_unknown_cmd2)) assert 'brew install' in cmds assert 'brew uninstall' in cmds diff --git a/tests/rules/test_brew_upgrade.py b/tests/rules/test_brew_upgrade.py index 941bb2c32..e1afc8ee9 100644 --- a/tests/rules/test_brew_upgrade.py +++ b/tests/rules/test_brew_upgrade.py @@ -6,10 +6,10 @@ @pytest.mark.parametrize('command', [ Command(script='brew upgrade')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ (Command('brew upgrade'), 'brew upgrade --all')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_cargo_no_command.py b/tests/rules/test_cargo_no_command.py index df875858b..2c70b6b1b 100644 --- a/tests/rules/test_cargo_no_command.py +++ b/tests/rules/test_cargo_no_command.py @@ -12,10 +12,10 @@ @pytest.mark.parametrize('command', [ Command(script='cargo buid', stderr=no_such_subcommand)]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ (Command('cargo buid', stderr=no_such_subcommand), 'cargo build')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_cd_mkdir.py b/tests/rules/test_cd_mkdir.py index ae5449ffc..759ada362 100644 --- a/tests/rules/test_cd_mkdir.py +++ b/tests/rules/test_cd_mkdir.py @@ -9,17 +9,17 @@ stderr='cd: foo: No such file or directory'), Command(script='cd foo/bar/baz', stderr='cd: can\'t cd to foo/bar/baz')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ Command(script='cd foo', stderr=''), Command()]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ (Command('cd foo'), 'mkdir -p foo && cd foo'), (Command('cd foo/bar/baz'), 'mkdir -p foo/bar/baz && cd foo/bar/baz')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_cd_parent.py b/tests/rules/test_cd_parent.py index 61d1ab1db..812f5885f 100644 --- a/tests/rules/test_cd_parent.py +++ b/tests/rules/test_cd_parent.py @@ -3,10 +3,10 @@ def test_match(): - assert match(Command('cd..', stderr='cd..: command not found'), None) - assert not match(Command(), None) + assert match(Command('cd..', stderr='cd..: command not found')) + assert not match(Command()) def test_get_new_command(): assert get_new_command( - Command('cd..'), None) == 'cd ..' + Command('cd..')) == 'cd ..' diff --git a/tests/rules/test_composer_not_command.py b/tests/rules/test_composer_not_command.py index 9ffdd0040..c4e4a5a4d 100644 --- a/tests/rules/test_composer_not_command.py +++ b/tests/rules/test_composer_not_command.py @@ -41,17 +41,16 @@ def composer_not_command_one_of_this(): def test_match(composer_not_command, composer_not_command_one_of_this): assert match(Command('composer udpate', - stderr=composer_not_command), None) + stderr=composer_not_command)) assert match(Command('composer pdate', - stderr=composer_not_command_one_of_this), None) - assert not match(Command('ls update', stderr=composer_not_command), - None) + stderr=composer_not_command_one_of_this)) + assert not match(Command('ls update', stderr=composer_not_command)) def test_get_new_command(composer_not_command, composer_not_command_one_of_this): assert get_new_command(Command('composer udpate', - stderr=composer_not_command), None) \ + stderr=composer_not_command)) \ == 'composer update' assert get_new_command( - Command('composer pdate', stderr=composer_not_command_one_of_this), - None) == 'composer selfupdate' + Command('composer pdate', stderr=composer_not_command_one_of_this)) \ + == 'composer selfupdate' diff --git a/tests/rules/test_cp_omitting_directory.py b/tests/rules/test_cp_omitting_directory.py index cdd5d16d6..364e92760 100644 --- a/tests/rules/test_cp_omitting_directory.py +++ b/tests/rules/test_cp_omitting_directory.py @@ -7,7 +7,7 @@ ('cp dir', 'cp: dor: is a directory'), ('cp dir', "cp: omitting directory 'dir'")]) def test_match(script, stderr): - assert match(Command(script, stderr=stderr), None) + assert match(Command(script, stderr=stderr)) @pytest.mark.parametrize('script, stderr', [ @@ -15,8 +15,8 @@ def test_match(script, stderr): ('some dir', "cp: omitting directory 'dir'"), ('cp dir', '')]) def test_not_match(script, stderr): - assert not match(Command(script, stderr=stderr), None) + assert not match(Command(script, stderr=stderr)) def test_get_new_command(): - assert get_new_command(Command(script='cp dir'), None) == 'cp -a dir' + assert get_new_command(Command(script='cp dir')) == 'cp -a dir' diff --git a/tests/rules/test_dirty_untar.py b/tests/rules/test_dirty_untar.py index 9b2e4aeeb..d5f5e21a9 100644 --- a/tests/rules/test_dirty_untar.py +++ b/tests/rules/test_dirty_untar.py @@ -45,14 +45,14 @@ def reset(path): @parametrize_script def test_match(tar_error, filename, script, fixed): tar_error(filename) - assert match(Command(script=script.format(filename)), None) + assert match(Command(script=script.format(filename))) @parametrize_filename @parametrize_script def test_side_effect(tar_error, filename, script, fixed): tar_error(filename) - side_effect(Command(script=script.format(filename)), None, None) + side_effect(Command(script=script.format(filename)), None) assert(os.listdir('.') == [filename]) @@ -60,4 +60,4 @@ def test_side_effect(tar_error, filename, script, fixed): @parametrize_script def test_get_new_command(tar_error, filename, script, fixed): tar_error(filename) - assert get_new_command(Command(script=script.format(filename)), None) == fixed.format(filename) + assert get_new_command(Command(script=script.format(filename))) == fixed.format(filename) diff --git a/tests/rules/test_dirty_unzip.py b/tests/rules/test_dirty_unzip.py index 74dabf3f7..58375a12e 100644 --- a/tests/rules/test_dirty_unzip.py +++ b/tests/rules/test_dirty_unzip.py @@ -27,14 +27,14 @@ def reset(path): 'unzip foo', 'unzip foo.zip']) def test_match(zip_error, script): - assert match(Command(script=script), None) + assert match(Command(script=script)) @pytest.mark.parametrize('script', [ 'unzip foo', 'unzip foo.zip']) def test_side_effect(zip_error, script): - side_effect(Command(script=script), None, None) + side_effect(Command(script=script), None) assert(os.listdir('.') == ['foo.zip']) @@ -42,4 +42,4 @@ def test_side_effect(zip_error, script): ('unzip foo', 'unzip foo -d foo'), ('unzip foo.zip', 'unzip foo.zip -d foo')]) def test_get_new_command(zip_error, script, fixed): - assert get_new_command(Command(script=script), None) == fixed + assert get_new_command(Command(script=script)) == fixed diff --git a/tests/rules/test_django_south_ghost.py b/tests/rules/test_django_south_ghost.py index 70fc8903d..836564673 100644 --- a/tests/rules/test_django_south_ghost.py +++ b/tests/rules/test_django_south_ghost.py @@ -41,13 +41,13 @@ def stderr(): def test_match(stderr): - assert match(Command('./manage.py migrate', stderr=stderr), None) - assert match(Command('python manage.py migrate', stderr=stderr), None) - assert not match(Command('./manage.py migrate'), None) - assert not match(Command('app migrate', stderr=stderr), None) - assert not match(Command('./manage.py test', stderr=stderr), None) + assert match(Command('./manage.py migrate', stderr=stderr)) + assert match(Command('python manage.py migrate', stderr=stderr)) + assert not match(Command('./manage.py migrate')) + assert not match(Command('app migrate', stderr=stderr)) + assert not match(Command('./manage.py test', stderr=stderr)) def test_get_new_command(): - assert get_new_command(Command('./manage.py migrate auth'), None)\ + assert get_new_command(Command('./manage.py migrate auth'))\ == './manage.py migrate auth --delete-ghost-migrations' diff --git a/tests/rules/test_django_south_merge.py b/tests/rules/test_django_south_merge.py index c0426122b..13f7dbafd 100644 --- a/tests/rules/test_django_south_merge.py +++ b/tests/rules/test_django_south_merge.py @@ -31,13 +31,13 @@ def stderr(): def test_match(stderr): - assert match(Command('./manage.py migrate', stderr=stderr), None) - assert match(Command('python manage.py migrate', stderr=stderr), None) - assert not match(Command('./manage.py migrate'), None) - assert not match(Command('app migrate', stderr=stderr), None) - assert not match(Command('./manage.py test', stderr=stderr), None) + assert match(Command('./manage.py migrate', stderr=stderr)) + assert match(Command('python manage.py migrate', stderr=stderr)) + assert not match(Command('./manage.py migrate')) + assert not match(Command('app migrate', stderr=stderr)) + assert not match(Command('./manage.py test', stderr=stderr)) def test_get_new_command(): - assert get_new_command(Command('./manage.py migrate auth'), None) \ + assert get_new_command(Command('./manage.py migrate auth')) \ == './manage.py migrate auth --merge' diff --git a/tests/rules/test_docker_not_command.py b/tests/rules/test_docker_not_command.py index 5e9a7811f..172f1bf67 100644 --- a/tests/rules/test_docker_not_command.py +++ b/tests/rules/test_docker_not_command.py @@ -110,14 +110,14 @@ def stderr(cmd): def test_match(): - assert match(Command('docker pes', stderr=stderr('pes')), None) + assert match(Command('docker pes', stderr=stderr('pes'))) @pytest.mark.parametrize('script, stderr', [ ('docker ps', ''), ('cat pes', stderr('pes'))]) def test_not_match(script, stderr): - assert not match(Command(script, stderr=stderr), None) + assert not match(Command(script, stderr=stderr)) @pytest.mark.usefixtures('docker_help') @@ -126,4 +126,4 @@ def test_not_match(script, stderr): ('tags', ['tag', 'stats', 'images'])]) def test_get_new_command(wrong, fixed): command = Command('docker {}'.format(wrong), stderr=stderr(wrong)) - assert get_new_command(command, None) == ['docker {}'.format(x) for x in fixed] + assert get_new_command(command) == ['docker {}'.format(x) for x in fixed] diff --git a/tests/rules/test_dry.py b/tests/rules/test_dry.py index 757866df3..ce46865d0 100644 --- a/tests/rules/test_dry.py +++ b/tests/rules/test_dry.py @@ -7,11 +7,11 @@ Command(script='cd cd foo'), Command(script='git git push origin/master')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ (Command('cd cd foo'), 'cd foo'), (Command('git git push origin/master'), 'git push origin/master')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_fix_alt_space.py b/tests/rules/test_fix_alt_space.py index c27d3d2b6..c5b03c509 100644 --- a/tests/rules/test_fix_alt_space.py +++ b/tests/rules/test_fix_alt_space.py @@ -11,12 +11,12 @@ def test_match(): """ assert match(Command(u'ps -ef | grep foo', - stderr=u'-bash:  grep: command not found'), None) - assert not match(Command('ps -ef | grep foo'), None) - assert not match(Command(), None) + stderr=u'-bash:  grep: command not found')) + assert not match(Command('ps -ef | grep foo')) + assert not match(Command()) def test_get_new_command(): """ Replace the Alt+Space character by a simple space """ - assert get_new_command(Command(u'ps -ef | grep foo'), None)\ + assert get_new_command(Command(u'ps -ef | grep foo'))\ == 'ps -ef | grep foo' diff --git a/tests/rules/test_fix_file.py b/tests/rules/test_fix_file.py index 9b84a1a49..24d7bc17b 100644 --- a/tests/rules/test_fix_file.py +++ b/tests/rules/test_fix_file.py @@ -184,7 +184,7 @@ def test_get_new_command(monkeypatch, test): def test_match(mocker, monkeypatch, test): mocker.patch('os.path.isfile', return_value=True) monkeypatch.setenv('EDITOR', 'dummy_editor') - assert match(Command(stdout=test[4], stderr=test[5]), None) + assert match(Command(stdout=test[4], stderr=test[5])) @pytest.mark.parametrize('test', tests) @@ -194,7 +194,7 @@ def test_no_editor(mocker, monkeypatch, test): if 'EDITOR' in os.environ: monkeypatch.delenv('EDITOR') - assert not match(Command(stdout=test[4], stderr=test[5]), None) + assert not match(Command(stdout=test[4], stderr=test[5])) @pytest.mark.parametrize('test', tests) @@ -203,7 +203,7 @@ def test_not_file(mocker, monkeypatch, test): mocker.patch('os.path.isfile', return_value=False) monkeypatch.setenv('EDITOR', 'dummy_editor') - assert not match(Command(stdout=test[4], stderr=test[5]), None) + assert not match(Command(stdout=test[4], stderr=test[5])) @pytest.mark.parametrize('test', tests) @@ -219,16 +219,16 @@ def test_get_new_command(mocker, monkeypatch, test): @pytest.mark.parametrize('test', tests) @pytest.mark.usefixtures('no_memoize') -def test_get_new_command_with_settings(mocker, monkeypatch, test): +def test_get_new_command_with_settings(mocker, monkeypatch, test, settings): mocker.patch('os.path.isfile', return_value=True) monkeypatch.setenv('EDITOR', 'dummy_editor') cmd = Command(script=test[0], stdout=test[4], stderr=test[5]) - settings = Settings({'fixcolcmd': '{editor} {file} +{line}:{col}'}) + settings.fixcolcmd = '{editor} {file} +{line}:{col}' if test[3]: - assert (get_new_command(cmd, settings) == + assert (get_new_command(cmd) == 'dummy_editor {} +{}:{} && {}'.format(test[1], test[2], test[3], test[0])) else: - assert (get_new_command(cmd, settings) == + assert (get_new_command(cmd) == 'dummy_editor {} +{} && {}'.format(test[1], test[2], test[0])) diff --git a/tests/rules/test_git_add.py b/tests/rules/test_git_add.py index 8bad9bb61..c5b7c251a 100644 --- a/tests/rules/test_git_add.py +++ b/tests/rules/test_git_add.py @@ -18,7 +18,7 @@ def did_not_match(target, did_you_forget=True): Command(script='git commit unknown', stderr=did_not_match('unknown'))]) # Older versions of Git def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -27,7 +27,7 @@ def test_match(command): Command(script='git commit unknown', # Newer versions of Git stderr=did_not_match('unknown', False))]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -36,4 +36,4 @@ def test_not_match(command): (Command('git commit unknown', stderr=did_not_match('unknown')), # Old Git 'git add -- unknown && git commit unknown')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_git_branch_delete.py b/tests/rules/test_git_branch_delete.py index 44a8f4490..bfcc5d17a 100644 --- a/tests/rules/test_git_branch_delete.py +++ b/tests/rules/test_git_branch_delete.py @@ -12,11 +12,11 @@ def stderr(): def test_match(stderr): - assert match(Command('git branch -d branch', stderr=stderr), None) - assert not match(Command('git branch -d branch'), None) - assert not match(Command('ls', stderr=stderr), None) + assert match(Command('git branch -d branch', stderr=stderr)) + assert not match(Command('git branch -d branch')) + assert not match(Command('ls', stderr=stderr)) def test_get_new_command(stderr): - assert get_new_command(Command('git branch -d branch', stderr=stderr), None)\ + assert get_new_command(Command('git branch -d branch', stderr=stderr))\ == "git branch -D branch" diff --git a/tests/rules/test_git_branch_list.py b/tests/rules/test_git_branch_list.py index 4d77e1a4f..79302c58c 100644 --- a/tests/rules/test_git_branch_list.py +++ b/tests/rules/test_git_branch_list.py @@ -4,16 +4,16 @@ def test_match(): - assert match(Command('git branch list'), None) + assert match(Command('git branch list')) def test_not_match(): - assert not match(Command(), None) - assert not match(Command('git commit'), None) - assert not match(Command('git branch'), None) - assert not match(Command('git stash list'), None) + assert not match(Command()) + assert not match(Command('git commit')) + assert not match(Command('git branch')) + assert not match(Command('git stash list')) def test_get_new_command(): - assert (get_new_command(Command('git branch list'), None) == + assert (get_new_command(Command('git branch list')) == shells.and_('git branch --delete list', 'git branch')) diff --git a/tests/rules/test_git_checkout.py b/tests/rules/test_git_checkout.py index e460fff14..e4381cdb2 100644 --- a/tests/rules/test_git_checkout.py +++ b/tests/rules/test_git_checkout.py @@ -21,7 +21,7 @@ def get_branches(mocker): Command(script='git checkout unknown', stderr=did_not_match('unknown')), Command(script='git commit unknown', stderr=did_not_match('unknown'))]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -30,7 +30,7 @@ def test_match(command): Command(script='git checkout known', stderr=('')), Command(script='git commit known', stderr=(''))]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('branches, command, new_command', [ @@ -50,4 +50,4 @@ def test_not_match(command): 'git commit test-random-branch-123')]) def test_get_new_command(branches, command, new_command, get_branches): get_branches.return_value = branches - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_git_diff_staged.py b/tests/rules/test_git_diff_staged.py index 364cb267c..9ff673bd4 100644 --- a/tests/rules/test_git_diff_staged.py +++ b/tests/rules/test_git_diff_staged.py @@ -7,7 +7,7 @@ Command(script='git diff foo'), Command(script='git diff')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -16,11 +16,11 @@ def test_match(command): Command(script='git branch'), Command(script='git log')]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ (Command('git diff'), 'git diff --staged'), (Command('git diff foo'), 'git diff --staged foo')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_git_fix_stash.py b/tests/rules/test_git_fix_stash.py index 6eac71d9d..206d54fc6 100644 --- a/tests/rules/test_git_fix_stash.py +++ b/tests/rules/test_git_fix_stash.py @@ -20,7 +20,7 @@ 'git stash Some message', 'git stash saev Some message']) def test_match(wrong): - assert match(Command(wrong, stderr=git_stash_err), None) + assert match(Command(wrong, stderr=git_stash_err)) @pytest.mark.parametrize('wrong,fixed', [ @@ -28,4 +28,4 @@ def test_match(wrong): ('git stash Some message', 'git stash save Some message'), ('git stash saev Some message', 'git stash save Some message')]) def test_get_new_command(wrong, fixed): - assert get_new_command(Command(wrong, stderr=git_stash_err), None) == fixed + assert get_new_command(Command(wrong, stderr=git_stash_err)) == fixed diff --git a/tests/rules/test_git_not_command.py b/tests/rules/test_git_not_command.py index 80aa5c929..6257767e9 100644 --- a/tests/rules/test_git_not_command.py +++ b/tests/rules/test_git_not_command.py @@ -41,17 +41,17 @@ def git_command(): def test_match(git_not_command, git_command, git_not_command_one_of_this): - assert match(Command('git brnch', stderr=git_not_command), None) - assert match(Command('git st', stderr=git_not_command_one_of_this), None) - assert not match(Command('ls brnch', stderr=git_not_command), None) - assert not match(Command('git branch', stderr=git_command), None) + assert match(Command('git brnch', stderr=git_not_command)) + assert match(Command('git st', stderr=git_not_command_one_of_this)) + assert not match(Command('ls brnch', stderr=git_not_command)) + assert not match(Command('git branch', stderr=git_command)) def test_get_new_command(git_not_command, git_not_command_one_of_this, git_not_command_closest): - assert get_new_command(Command('git brnch', stderr=git_not_command), None) \ + assert get_new_command(Command('git brnch', stderr=git_not_command)) \ == ['git branch'] - assert get_new_command(Command('git st', stderr=git_not_command_one_of_this), - None) == ['git stats', 'git stash', 'git stage'] - assert get_new_command(Command('git tags', stderr=git_not_command_closest), - None) == ['git tag', 'git stage'] + assert get_new_command(Command('git st', stderr=git_not_command_one_of_this)) \ + == ['git stats', 'git stash', 'git stage'] + assert get_new_command(Command('git tags', stderr=git_not_command_closest)) \ + == ['git tag', 'git stage'] diff --git a/tests/rules/test_git_pull.py b/tests/rules/test_git_pull.py index 87725f5a6..11c50171d 100644 --- a/tests/rules/test_git_pull.py +++ b/tests/rules/test_git_pull.py @@ -19,11 +19,11 @@ def stderr(): def test_match(stderr): - assert match(Command('git pull', stderr=stderr), None) - assert not match(Command('git pull'), None) - assert not match(Command('ls', stderr=stderr), None) + assert match(Command('git pull', stderr=stderr)) + assert not match(Command('git pull')) + assert not match(Command('ls', stderr=stderr)) def test_get_new_command(stderr): - assert get_new_command(Command('git pull', stderr=stderr), None) \ + assert get_new_command(Command('git pull', stderr=stderr)) \ == "git branch --set-upstream-to=origin/master master && git pull" diff --git a/tests/rules/test_git_pull_clone.py b/tests/rules/test_git_pull_clone.py index 07249fae1..9e7875bb7 100644 --- a/tests/rules/test_git_pull_clone.py +++ b/tests/rules/test_git_pull_clone.py @@ -12,10 +12,10 @@ @pytest.mark.parametrize('command', [ Command(script='git pull git@github.com:mcarton/thefuck.git', stderr=git_err)]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, output', [ (Command(script='git pull git@github.com:mcarton/thefuck.git', stderr=git_err), 'git clone git@github.com:mcarton/thefuck.git')]) def test_get_new_command(command, output): - assert get_new_command(command, None) == output + assert get_new_command(command) == output diff --git a/tests/rules/test_git_push.py b/tests/rules/test_git_push.py index 2625c0d94..65b210a13 100644 --- a/tests/rules/test_git_push.py +++ b/tests/rules/test_git_push.py @@ -14,11 +14,11 @@ def stderr(): def test_match(stderr): - assert match(Command('git push master', stderr=stderr), None) - assert not match(Command('git push master'), None) - assert not match(Command('ls', stderr=stderr), None) + assert match(Command('git push master', stderr=stderr)) + assert not match(Command('git push master')) + assert not match(Command('ls', stderr=stderr)) def test_get_new_command(stderr): - assert get_new_command(Command('git push', stderr=stderr), None)\ + assert get_new_command(Command('git push', stderr=stderr))\ == "git push --set-upstream origin master" diff --git a/tests/rules/test_git_push_force.py b/tests/rules/test_git_push_force.py index c55e77d0a..b7420ffc3 100644 --- a/tests/rules/test_git_push_force.py +++ b/tests/rules/test_git_push_force.py @@ -30,7 +30,7 @@ Command(script='git push nvbn', stderr=git_err), Command(script='git push nvbn master', stderr=git_err)]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -41,7 +41,7 @@ def test_match(command): Command(script='git push nvbn', stderr=git_ok), Command(script='git push nvbn master', stderr=git_uptodate)]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, output', [ @@ -49,4 +49,4 @@ def test_not_match(command): (Command(script='git push nvbn', stderr=git_err), 'git push --force nvbn'), (Command(script='git push nvbn master', stderr=git_err), 'git push --force nvbn master')]) def test_get_new_command(command, output): - assert get_new_command(command, None) == output + assert get_new_command(command) == output diff --git a/tests/rules/test_git_push_pull.py b/tests/rules/test_git_push_pull.py index dedcfc796..0e950df49 100644 --- a/tests/rules/test_git_push_pull.py +++ b/tests/rules/test_git_push_pull.py @@ -30,7 +30,7 @@ Command(script='git push nvbn', stderr=git_err), Command(script='git push nvbn master', stderr=git_err)]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -41,7 +41,7 @@ def test_match(command): Command(script='git push nvbn', stderr=git_ok), Command(script='git push nvbn master', stderr=git_uptodate)]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, output', [ @@ -51,4 +51,4 @@ def test_not_match(command): (Command(script='git push nvbn master', stderr=git_err), 'git pull nvbn master && git push nvbn master')]) def test_get_new_command(command, output): - assert get_new_command(command, None) == output + assert get_new_command(command) == output diff --git a/tests/rules/test_git_stash.py b/tests/rules/test_git_stash.py index 2aa062773..da9aded7d 100644 --- a/tests/rules/test_git_stash.py +++ b/tests/rules/test_git_stash.py @@ -18,14 +18,14 @@ Command(script='git cherry-pick a1b2c3d', stderr=cherry_pick_error), Command(script='git rebase -i HEAD~7', stderr=rebase_error)]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ Command(script='git cherry-pick a1b2c3d', stderr=('')), Command(script='git rebase -i HEAD~7', stderr=(''))]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -34,4 +34,4 @@ def test_not_match(command): (Command('git rebase -i HEAD~7', stderr=rebase_error), 'git stash && git rebase -i HEAD~7')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_go_run.py b/tests/rules/test_go_run.py index 9b5baf6fd..f0ae90cc3 100644 --- a/tests/rules/test_go_run.py +++ b/tests/rules/test_go_run.py @@ -7,11 +7,11 @@ Command(script='go run foo'), Command(script='go run bar')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ (Command('go run foo'), 'go run foo.go'), (Command('go run bar'), 'go run bar.go')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_grep_recursive.py b/tests/rules/test_grep_recursive.py index 0e3dae1d5..6c4594968 100644 --- a/tests/rules/test_grep_recursive.py +++ b/tests/rules/test_grep_recursive.py @@ -3,10 +3,10 @@ def test_match(): - assert match(Command('grep blah .', stderr='grep: .: Is a directory'), None) - assert not match(Command(), None) + assert match(Command('grep blah .', stderr='grep: .: Is a directory')) + assert not match(Command()) def test_get_new_command(): assert get_new_command( - Command('grep blah .'), None) == 'grep -r blah .' + Command('grep blah .')) == 'grep -r blah .' diff --git a/tests/rules/test_gulp_not_task.py b/tests/rules/test_gulp_not_task.py index 980e0f737..cf76750fc 100644 --- a/tests/rules/test_gulp_not_task.py +++ b/tests/rules/test_gulp_not_task.py @@ -11,18 +11,18 @@ def stdout(task): def test_match(): - assert match(Command('gulp srve', stdout('srve')), None) + assert match(Command('gulp srve', stdout('srve'))) @pytest.mark.parametrize('script, stdout', [ ('gulp serve', ''), ('cat srve', stdout('srve'))]) def test_not_march(script, stdout): - assert not match(Command(script, stdout), None) + assert not match(Command(script, stdout)) def test_get_new_command(mocker): mocker.patch('thefuck.rules.gulp_not_task.get_gulp_tasks', return_value=[ 'serve', 'build', 'default']) command = Command('gulp srve', stdout('srve')) - assert get_new_command(command, None) == ['gulp serve', 'gulp default'] + assert get_new_command(command) == ['gulp serve', 'gulp default'] diff --git a/tests/rules/test_has_exists_script.py b/tests/rules/test_has_exists_script.py index e00c4bddb..6a94760cc 100644 --- a/tests/rules/test_has_exists_script.py +++ b/tests/rules/test_has_exists_script.py @@ -4,17 +4,14 @@ def test_match(): with patch('os.path.exists', return_value=True): - assert match(Mock(script='main', stderr='main: command not found'), - None) + assert match(Mock(script='main', stderr='main: command not found')) assert match(Mock(script='main --help', - stderr='main: command not found'), - None) - assert not match(Mock(script='main', stderr=''), None) + stderr='main: command not found')) + assert not match(Mock(script='main', stderr='')) with patch('os.path.exists', return_value=False): - assert not match(Mock(script='main', stderr='main: command not found'), - None) + assert not match(Mock(script='main', stderr='main: command not found')) def test_get_new_command(): - assert get_new_command(Mock(script='main --help'), None) == './main --help' + assert get_new_command(Mock(script='main --help')) == './main --help' diff --git a/tests/rules/test_heroku_not_command.py b/tests/rules/test_heroku_not_command.py index c1f5a7617..b322fec41 100644 --- a/tests/rules/test_heroku_not_command.py +++ b/tests/rules/test_heroku_not_command.py @@ -16,14 +16,14 @@ def suggest_stderr(cmd): @pytest.mark.parametrize('cmd', ['log', 'pge']) def test_match(cmd): assert match( - Command('heroku {}'.format(cmd), stderr=suggest_stderr(cmd)), None) + Command('heroku {}'.format(cmd), stderr=suggest_stderr(cmd))) @pytest.mark.parametrize('script, stderr', [ ('cat log', suggest_stderr('log')), ('heroku aaa', no_suggest_stderr)]) def test_not_match(script, stderr): - assert not match(Command(script, stderr=stderr), None) + assert not match(Command(script, stderr=stderr)) @pytest.mark.parametrize('cmd, result', [ @@ -31,4 +31,4 @@ def test_not_match(script, stderr): ('pge', ['heroku pg', 'heroku logs'])]) def test_get_new_command(cmd, result): command = Command('heroku {}'.format(cmd), stderr=suggest_stderr(cmd)) - assert get_new_command(command, None) == result + assert get_new_command(command) == result diff --git a/tests/rules/test_history.py b/tests/rules/test_history.py index 9f9c3b244..6422743b4 100644 --- a/tests/rules/test_history.py +++ b/tests/rules/test_history.py @@ -25,13 +25,13 @@ def callables(mocker): @pytest.mark.usefixtures('history', 'callables', 'no_memoize', 'alias') @pytest.mark.parametrize('script', ['ls cet', 'daff x']) def test_match(script): - assert match(Command(script=script), None) + assert match(Command(script=script)) @pytest.mark.usefixtures('history', 'callables', 'no_memoize', 'alias') @pytest.mark.parametrize('script', ['apt-get', 'nocommand y']) def test_not_match(script): - assert not match(Command(script=script), None) + assert not match(Command(script=script)) @pytest.mark.usefixtures('history', 'callables', 'no_memoize', 'alias') @@ -39,4 +39,4 @@ def test_not_match(script): ('ls cet', 'ls cat'), ('daff x', 'diff x')]) def test_get_new_command(script, result): - assert get_new_command(Command(script), None) == result + assert get_new_command(Command(script)) == result diff --git a/tests/rules/test_java.py b/tests/rules/test_java.py index 928ac69da..a7194ec3e 100644 --- a/tests/rules/test_java.py +++ b/tests/rules/test_java.py @@ -7,11 +7,11 @@ Command(script='java foo.java'), Command(script='java bar.java')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ (Command('java foo.java'), 'java foo'), (Command('java bar.java'), 'java bar')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_javac.py b/tests/rules/test_javac.py index 470003847..a83b08219 100644 --- a/tests/rules/test_javac.py +++ b/tests/rules/test_javac.py @@ -7,11 +7,11 @@ Command(script='javac foo'), Command(script='javac bar')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ (Command('javac foo'), 'javac foo.java'), (Command('javac bar'), 'javac bar.java')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_lein_not_task.py b/tests/rules/test_lein_not_task.py index 9069fcd0c..b4fc4498f 100644 --- a/tests/rules/test_lein_not_task.py +++ b/tests/rules/test_lein_not_task.py @@ -14,10 +14,10 @@ def is_not_task(): def test_match(is_not_task): - assert match(Command(script='lein rpl', stderr=is_not_task), None) - assert not match(Command(script='ls', stderr=is_not_task), None) + assert match(Command(script='lein rpl', stderr=is_not_task)) + assert not match(Command(script='ls', stderr=is_not_task)) def test_get_new_command(is_not_task): - assert get_new_command(Command(script='lein rpl --help', stderr=is_not_task), - None) == ['lein repl --help', 'lein jar --help'] + assert get_new_command(Command(script='lein rpl --help', stderr=is_not_task)) \ + == ['lein repl --help', 'lein jar --help'] diff --git a/tests/rules/test_ls_lah.py b/tests/rules/test_ls_lah.py index 973252584..3766f87cf 100644 --- a/tests/rules/test_ls_lah.py +++ b/tests/rules/test_ls_lah.py @@ -3,14 +3,14 @@ def test_match(): - assert match(Command(script='ls'), None) - assert match(Command(script='ls file.py'), None) - assert match(Command(script='ls /opt'), None) - assert not match(Command(script='ls -lah /opt'), None) - assert not match(Command(script='pacman -S binutils'), None) - assert not match(Command(script='lsof'), None) + assert match(Command(script='ls')) + assert match(Command(script='ls file.py')) + assert match(Command(script='ls /opt')) + assert not match(Command(script='ls -lah /opt')) + assert not match(Command(script='pacman -S binutils')) + assert not match(Command(script='lsof')) def test_get_new_command(): - assert get_new_command(Command(script='ls file.py'), None) == 'ls -lah file.py' - assert get_new_command(Command(script='ls'), None) == 'ls -lah' + assert get_new_command(Command(script='ls file.py')) == 'ls -lah file.py' + assert get_new_command(Command(script='ls')) == 'ls -lah' diff --git a/tests/rules/test_man.py b/tests/rules/test_man.py index 7be546877..01eab1735 100644 --- a/tests/rules/test_man.py +++ b/tests/rules/test_man.py @@ -12,14 +12,14 @@ Command('man -s 2 read'), Command('man -s 3 read')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ Command('man'), Command('man ')]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -31,4 +31,4 @@ def test_not_match(command): (Command('man -s 2 read'), 'man -s 3 read'), (Command('man -s 3 read'), 'man -s 2 read')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_man_no_space.py b/tests/rules/test_man_no_space.py index 669ebb854..949acf081 100644 --- a/tests/rules/test_man_no_space.py +++ b/tests/rules/test_man_no_space.py @@ -3,10 +3,10 @@ def test_match(): - assert match(Command('mandiff', stderr='mandiff: command not found'), None) - assert not match(Command(), None) + assert match(Command('mandiff', stderr='mandiff: command not found')) + assert not match(Command()) def test_get_new_command(): assert get_new_command( - Command('mandiff'), None) == 'man diff' + Command('mandiff')) == 'man diff' diff --git a/tests/rules/test_mercurial.py b/tests/rules/test_mercurial.py index 8ef251981..75fdf8361 100644 --- a/tests/rules/test_mercurial.py +++ b/tests/rules/test_mercurial.py @@ -37,7 +37,7 @@ )), ]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -63,7 +63,7 @@ def test_match(command): )), ]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, possibilities', [ @@ -131,4 +131,4 @@ def test_extract_possibilities(command, possibilities): )), 'hg rebase re'), ]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_mkdir_p.py b/tests/rules/test_mkdir_p.py index b04a53aee..8d8a3bfeb 100644 --- a/tests/rules/test_mkdir_p.py +++ b/tests/rules/test_mkdir_p.py @@ -9,7 +9,7 @@ Command('hdfs dfs -mkdir foo/bar/baz', stderr='mkdir: `foo/bar/baz\': No such file or directory') ]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -19,7 +19,7 @@ def test_match(command): Command('./bin/hdfs dfs -mkdir foo/bar/baz'), Command()]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -27,5 +27,5 @@ def test_not_match(command): (Command('hdfs dfs -mkdir foo/bar/baz'), 'hdfs dfs -mkdir -p foo/bar/baz'), (Command('./bin/hdfs dfs -mkdir foo/bar/baz'), './bin/hdfs dfs -mkdir -p foo/bar/baz')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_mvn_no_command.py b/tests/rules/test_mvn_no_command.py index 5725adde0..1bb57d872 100644 --- a/tests/rules/test_mvn_no_command.py +++ b/tests/rules/test_mvn_no_command.py @@ -6,7 +6,7 @@ @pytest.mark.parametrize('command', [ Command(script='mvn', stdout='[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -30,11 +30,11 @@ def test_match(command): Command(script='mvn -v') ]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ (Command(script='mvn', stdout='[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean package', 'mvn clean install']), (Command(script='mvn -N', stdout='[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn -N clean package', 'mvn -N clean install'])]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_mvn_unknown_lifecycle_phase.py b/tests/rules/test_mvn_unknown_lifecycle_phase.py index 421325d10..0c2b1a17c 100644 --- a/tests/rules/test_mvn_unknown_lifecycle_phase.py +++ b/tests/rules/test_mvn_unknown_lifecycle_phase.py @@ -6,7 +6,7 @@ @pytest.mark.parametrize('command', [ Command(script='mvn cle', stdout='[ERROR] Unknown lifecycle phase "cle". You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -30,11 +30,11 @@ def test_match(command): Command(script='mvn -v') ]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ (Command(script='mvn cle', stdout='[ERROR] Unknown lifecycle phase "cle". You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean', 'mvn compile']), (Command(script='mvn claen package', stdout='[ERROR] Unknown lifecycle phase "claen". You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]'), ['mvn clean package'])]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_no_command.py b/tests/rules/test_no_command.py index a44c1fd94..a8a21cb82 100644 --- a/tests/rules/test_no_command.py +++ b/tests/rules/test_no_command.py @@ -11,19 +11,17 @@ def get_all_executables(mocker): @pytest.mark.usefixtures('no_memoize') def test_match(): - assert match(Command(stderr='vom: not found', script='vom file.py'), None) - assert match(Command(stderr='fucck: not found', script='fucck'), None) - assert not match(Command(stderr='qweqwe: not found', script='qweqwe'), None) - assert not match(Command(stderr='some text', script='vom file.py'), None) + assert match(Command(stderr='vom: not found', script='vom file.py')) + assert match(Command(stderr='fucck: not found', script='fucck')) + assert not match(Command(stderr='qweqwe: not found', script='qweqwe')) + assert not match(Command(stderr='some text', script='vom file.py')) @pytest.mark.usefixtures('no_memoize') def test_get_new_command(): assert get_new_command( Command(stderr='vom: not found', - script='vom file.py'), - None) == ['vim file.py'] + script='vom file.py')) == ['vim file.py'] assert get_new_command( Command(stderr='fucck: not found', - script='fucck'), - Command) == ['fsck'] + script='fucck')) == ['fsck'] diff --git a/tests/rules/test_no_such_file.py b/tests/rules/test_no_such_file.py index 3b251529a..0735cd6b9 100644 --- a/tests/rules/test_no_such_file.py +++ b/tests/rules/test_no_such_file.py @@ -8,7 +8,7 @@ Command(script='mv foo bar/', stderr="mv: cannot move 'foo' to 'bar/': No such file or directory"), ]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -16,7 +16,7 @@ def test_match(command): Command(script='mv foo bar/foo', stderr="mv: permission denied"), ]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -24,4 +24,4 @@ def test_not_match(command): (Command(script='mv foo bar/', stderr="mv: cannot move 'foo' to 'bar/': No such file or directory"), 'mkdir -p bar && mv foo bar/'), ]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_open.py b/tests/rules/test_open.py index 3c660eadf..c80eeca8b 100644 --- a/tests/rules/test_open.py +++ b/tests/rules/test_open.py @@ -14,7 +14,7 @@ Command(script='gnome-open foo.com'), Command(script='kde-open foo.com')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ @@ -28,4 +28,4 @@ def test_match(command): (Command('gnome-open foo.io'), 'gnome-open http://foo.io'), (Command('kde-open foo.io'), 'kde-open http://foo.io')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_pacman.py b/tests/rules/test_pacman.py index f0e005154..956497f59 100644 --- a/tests/rules/test_pacman.py +++ b/tests/rules/test_pacman.py @@ -23,7 +23,7 @@ Command(script='vim', stderr='vim: command not found'), Command(script='sudo vim', stderr='sudo: vim: command not found')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, return_value', [ @@ -33,14 +33,14 @@ def test_match(command): @patch.multiple(pacman, create=True, pacman=pacman_cmd) def test_match_mocked(subp_mock, command, return_value): subp_mock.check_output.return_value = return_value - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ Command(script='vim', stderr=''), Command(), Command(script='sudo vim', stderr=''), Command()]) def test_not_match(command): - assert not match(command, None) + assert not match(command) sudo_vim_possibilities = ['{} -S extra/gvim && sudo vim', @@ -66,7 +66,7 @@ def test_not_match(command): (Command('convert'), ['{} -S extra/imagemagick && convert'.format(pacman_cmd)]), (Command('sudo convert'), ['{} -S extra/imagemagick && sudo convert'.format(pacman_cmd)])]) def test_get_new_command(command, new_command, mocker): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command @pytest.mark.parametrize('command, new_command, return_value', [ @@ -79,4 +79,4 @@ def test_get_new_command(command, new_command, mocker): @patch.multiple(pacman, create=True, pacman=pacman_cmd) def test_get_new_command_mocked(subp_mock, command, new_command, return_value): subp_mock.check_output.return_value = return_value - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_pacman_not_found.py b/tests/rules/test_pacman_not_found.py index c1c4a8da1..b98dc3350 100644 --- a/tests/rules/test_pacman_not_found.py +++ b/tests/rules/test_pacman_not_found.py @@ -15,7 +15,7 @@ Command(script='pacman llc', stderr='error: target not found: llc'), Command(script='sudo pacman llc', stderr='error: target not found: llc')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -25,7 +25,7 @@ def test_match(command): @patch('thefuck.specific.archlinux.subprocess') def test_match_mocked(subp_mock, command): subp_mock.check_output.return_value = PKGFILE_OUTPUT_LLC - assert match(command, None) + assert match(command) @pytest.mark.skipif(not getattr(pacman_not_found, 'enabled_by_default', True), @@ -35,7 +35,7 @@ def test_match_mocked(subp_mock, command): (Command(script='pacman -S llc', stderr='error: target not found: llc'), ['pacman -S extra/llvm', 'pacman -S extra/llvm35']), (Command(script='sudo pacman -S llc', stderr='error: target not found: llc'), ['sudo pacman -S extra/llvm', 'sudo pacman -S extra/llvm35'])]) def test_get_new_command(command, fixed): - assert get_new_command(command, None) == fixed + assert get_new_command(command) == fixed @pytest.mark.parametrize('command, fixed', [ @@ -45,4 +45,4 @@ def test_get_new_command(command, fixed): @patch('thefuck.specific.archlinux.subprocess') def test_get_new_command_mocked(subp_mock, command, fixed): subp_mock.check_output.return_value = PKGFILE_OUTPUT_LLC - assert get_new_command(command, None) == fixed + assert get_new_command(command) == fixed diff --git a/tests/rules/test_pip_unknown_command.py b/tests/rules/test_pip_unknown_command.py index 58ba2bb86..79fa2f2c2 100644 --- a/tests/rules/test_pip_unknown_command.py +++ b/tests/rules/test_pip_unknown_command.py @@ -14,12 +14,11 @@ def pip_unknown_cmd_without_recommend(): def test_match(pip_unknown_cmd, pip_unknown_cmd_without_recommend): - assert match(Command('pip instatl', stderr=pip_unknown_cmd), None) + assert match(Command('pip instatl', stderr=pip_unknown_cmd)) assert not match(Command('pip i', - stderr=pip_unknown_cmd_without_recommend), - None) + stderr=pip_unknown_cmd_without_recommend)) def test_get_new_command(pip_unknown_cmd): - assert get_new_command(Command('pip instatl', stderr=pip_unknown_cmd), - None) == 'pip install' + assert get_new_command(Command('pip instatl', + stderr=pip_unknown_cmd)) == 'pip install' diff --git a/tests/rules/test_python_command.py b/tests/rules/test_python_command.py index 54be39a27..053457da3 100644 --- a/tests/rules/test_python_command.py +++ b/tests/rules/test_python_command.py @@ -3,10 +3,10 @@ def test_match(): - assert match(Command('temp.py', stderr='Permission denied'), None) - assert not match(Command(), None) + assert match(Command('temp.py', stderr='Permission denied')) + assert not match(Command()) def test_get_new_command(): - assert get_new_command(Command('./test_sudo.py'), None)\ + assert get_new_command(Command('./test_sudo.py'))\ == 'python ./test_sudo.py' diff --git a/tests/rules/test_python_execute.py b/tests/rules/test_python_execute.py index 168cb59b7..0f4a2222d 100644 --- a/tests/rules/test_python_execute.py +++ b/tests/rules/test_python_execute.py @@ -7,11 +7,11 @@ Command(script='python foo'), Command(script='python bar')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ (Command('python foo'), 'python foo.py'), (Command('python bar'), 'python bar.py')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_quotation_marks.py b/tests/rules/test_quotation_marks.py index 7c654e770..27b6699df 100644 --- a/tests/rules/test_quotation_marks.py +++ b/tests/rules/test_quotation_marks.py @@ -8,7 +8,7 @@ Command(script="git commit -am \"Mismatched Quotation Marks\'"), Command(script="echo \"hello\'")]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command, new_command', [ @@ -16,4 +16,4 @@ def test_match(command): (Command("git commit -am \"Mismatched Quotation Marks\'"), "git commit -am \"Mismatched Quotation Marks\""), (Command("echo \"hello\'"), "echo \"hello\"")]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_rm_dir.py b/tests/rules/test_rm_dir.py index ae8c92f14..65b41bd6d 100644 --- a/tests/rules/test_rm_dir.py +++ b/tests/rules/test_rm_dir.py @@ -10,7 +10,7 @@ Command('./bin/hdfs dfs -rm foo', stderr='rm: `foo`: Is a directory') ]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -19,13 +19,13 @@ def test_match(command): Command('./bin/hdfs dfs -rm foo'), Command()]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ (Command('rm foo'), 'rm -rf foo'), (Command('hdfs dfs -rm foo'), 'hdfs dfs -rm -r foo')]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_rm_root.py b/tests/rules/test_rm_root.py index f56595fc0..47c243f8a 100644 --- a/tests/rules/test_rm_root.py +++ b/tests/rules/test_rm_root.py @@ -5,7 +5,7 @@ def test_match(): assert match(Command(script='rm -rf /', - stderr='add --no-preserve-root'), None) + stderr='add --no-preserve-root')) @pytest.mark.parametrize('command', [ @@ -13,9 +13,9 @@ def test_match(): Command(script='rm --no-preserve-root /', stderr='add --no-preserve-root'), Command(script='rm -rf /', stderr='')]) def test_not_match(command): - assert not match(command, None) + assert not match(command) def test_get_new_command(): - assert get_new_command(Command(script='rm -rf /'), None) \ + assert get_new_command(Command(script='rm -rf /')) \ == 'rm -rf / --no-preserve-root' diff --git a/tests/rules/test_sed_unterminated_s.py b/tests/rules/test_sed_unterminated_s.py index dabfeeebe..0c890efd1 100644 --- a/tests/rules/test_sed_unterminated_s.py +++ b/tests/rules/test_sed_unterminated_s.py @@ -9,20 +9,20 @@ def sed_unterminated_s(): def test_match(sed_unterminated_s): - assert match(Command('sed -e s/foo/bar', stderr=sed_unterminated_s), None) - assert match(Command('sed -es/foo/bar', stderr=sed_unterminated_s), None) - assert match(Command('sed -e s/foo/bar -e s/baz/quz', stderr=sed_unterminated_s), None) - assert not match(Command('sed -e s/foo/bar'), None) - assert not match(Command('sed -es/foo/bar'), None) - assert not match(Command('sed -e s/foo/bar -e s/baz/quz'), None) + assert match(Command('sed -e s/foo/bar', stderr=sed_unterminated_s)) + assert match(Command('sed -es/foo/bar', stderr=sed_unterminated_s)) + assert match(Command('sed -e s/foo/bar -e s/baz/quz', stderr=sed_unterminated_s)) + assert not match(Command('sed -e s/foo/bar')) + assert not match(Command('sed -es/foo/bar')) + assert not match(Command('sed -e s/foo/bar -e s/baz/quz')) def test_get_new_command(sed_unterminated_s): - assert get_new_command(Command('sed -e s/foo/bar', stderr=sed_unterminated_s), None) \ + assert get_new_command(Command('sed -e s/foo/bar', stderr=sed_unterminated_s)) \ == 'sed -e s/foo/bar/' - assert get_new_command(Command('sed -es/foo/bar', stderr=sed_unterminated_s), None) \ + assert get_new_command(Command('sed -es/foo/bar', stderr=sed_unterminated_s)) \ == 'sed -es/foo/bar/' - assert get_new_command(Command(r"sed -e 's/\/foo/bar'", stderr=sed_unterminated_s), None) \ + assert get_new_command(Command(r"sed -e 's/\/foo/bar'", stderr=sed_unterminated_s)) \ == r"sed -e 's/\/foo/bar/'" - assert get_new_command(Command(r"sed -e s/foo/bar -es/baz/quz", stderr=sed_unterminated_s), None) \ + assert get_new_command(Command(r"sed -e s/foo/bar -es/baz/quz", stderr=sed_unterminated_s)) \ == r"sed -e s/foo/bar/ -es/baz/quz/" diff --git a/tests/rules/test_sl_ls.py b/tests/rules/test_sl_ls.py index 4ed7499ed..a1c46d8d6 100644 --- a/tests/rules/test_sl_ls.py +++ b/tests/rules/test_sl_ls.py @@ -4,9 +4,9 @@ def test_match(): - assert match(Command('sl'), None) - assert not match(Command('ls'), None) + assert match(Command('sl')) + assert not match(Command('ls')) def test_get_new_command(): - assert get_new_command(Command('sl'), None) == 'ls' + assert get_new_command(Command('sl')) == 'ls' diff --git a/tests/rules/test_ssh_known_host.py b/tests/rules/test_ssh_known_host.py index 7d201f3a0..d713acc53 100644 --- a/tests/rules/test_ssh_known_host.py +++ b/tests/rules/test_ssh_known_host.py @@ -44,23 +44,23 @@ def known_hosts(path): def test_match(ssh_error): errormsg, _, _, _ = ssh_error - assert match(Command('ssh', stderr=errormsg), None) - assert match(Command('ssh', stderr=errormsg), None) - assert match(Command('scp something something', stderr=errormsg), None) - assert match(Command('scp something something', stderr=errormsg), None) - assert not match(Command(stderr=errormsg), None) - assert not match(Command('notssh', stderr=errormsg), None) - assert not match(Command('ssh'), None) + assert match(Command('ssh', stderr=errormsg)) + assert match(Command('ssh', stderr=errormsg)) + assert match(Command('scp something something', stderr=errormsg)) + assert match(Command('scp something something', stderr=errormsg)) + assert not match(Command(stderr=errormsg)) + assert not match(Command('notssh', stderr=errormsg)) + assert not match(Command('ssh')) def test_side_effect(ssh_error): errormsg, path, reset, known_hosts = ssh_error command = Command('ssh user@host', stderr=errormsg) - side_effect(command, None, None) + side_effect(command, None) expected = ['123.234.567.890 asdjkasjdakjsd\n', '111.222.333.444 qwepoiwqepoiss\n'] assert known_hosts(path) == expected def test_get_new_command(ssh_error, monkeypatch): errormsg, _, _, _ = ssh_error - assert get_new_command(Command('ssh user@host', stderr=errormsg), None) == 'ssh user@host' + assert get_new_command(Command('ssh user@host', stderr=errormsg)) == 'ssh user@host' diff --git a/tests/rules/test_sudo.py b/tests/rules/test_sudo.py index 001132f08..fb6692bc5 100644 --- a/tests/rules/test_sudo.py +++ b/tests/rules/test_sudo.py @@ -14,11 +14,11 @@ ('You don\'t have access to the history DB.', ''), ('', "error: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/ipaddr.py'")]) def test_match(stderr, stdout): - assert match(Command(stderr=stderr, stdout=stdout), None) + assert match(Command(stderr=stderr, stdout=stdout)) def test_not_match(): - assert not match(Command(), None) + assert not match(Command()) @pytest.mark.parametrize('before, after', [ @@ -26,4 +26,4 @@ def test_not_match(): ('echo a > b', 'sudo sh -c "echo a > b"'), ('echo "a" >> b', 'sudo sh -c "echo \\"a\\" >> b"')]) def test_get_new_command(before, after): - assert get_new_command(Command(before), None) == after + assert get_new_command(Command(before)) == after diff --git a/tests/rules/test_switch_lang.py b/tests/rules/test_switch_lang.py index 71c2c7314..1a048acd4 100644 --- a/tests/rules/test_switch_lang.py +++ b/tests/rules/test_switch_lang.py @@ -9,7 +9,7 @@ Command(stderr='command not found: фзе-пуе', script=u'фзе-пуе'), Command(stderr='command not found: λσ', script=u'λσ')]) def test_match(command): - assert switch_lang.match(command, None) + assert switch_lang.match(command) @pytest.mark.parametrize('command', [ @@ -18,11 +18,11 @@ def test_match(command): Command(stderr='command not found: агсл', script=u'агсл'), Command(stderr='some info', script=u'фзе-пуе')]) def test_not_match(command): - assert not switch_lang.match(command, None) + assert not switch_lang.match(command) @pytest.mark.parametrize('command, new_command', [ (Command(u'фзе-пуе штыефдд мшь'), 'apt-get install vim'), (Command(u'λσ -λα'), 'ls -la')]) def test_get_new_command(command, new_command): - assert switch_lang.get_new_command(command, None) == new_command + assert switch_lang.get_new_command(command) == new_command diff --git a/tests/rules/test_systemctl.py b/tests/rules/test_systemctl.py index 89619d84f..c16b1eb4e 100644 --- a/tests/rules/test_systemctl.py +++ b/tests/rules/test_systemctl.py @@ -4,15 +4,15 @@ def test_match(): - assert match(Command('systemctl nginx start', stderr='Unknown operation \'nginx\'.'), None) - assert match(Command('sudo systemctl nginx start', stderr='Unknown operation \'nginx\'.'), None) - assert not match(Command('systemctl start nginx'), None) - assert not match(Command('systemctl start nginx'), None) - assert not match(Command('sudo systemctl nginx', stderr='Unknown operation \'nginx\'.'), None) - assert not match(Command('systemctl nginx', stderr='Unknown operation \'nginx\'.'), None) - assert not match(Command('systemctl start wtf', stderr='Failed to start wtf.service: Unit wtf.service failed to load: No such file or directory.'), None) + assert match(Command('systemctl nginx start', stderr='Unknown operation \'nginx\'.')) + assert match(Command('sudo systemctl nginx start', stderr='Unknown operation \'nginx\'.')) + assert not match(Command('systemctl start nginx')) + assert not match(Command('systemctl start nginx')) + assert not match(Command('sudo systemctl nginx', stderr='Unknown operation \'nginx\'.')) + assert not match(Command('systemctl nginx', stderr='Unknown operation \'nginx\'.')) + assert not match(Command('systemctl start wtf', stderr='Failed to start wtf.service: Unit wtf.service failed to load: No such file or directory.')) def test_get_new_command(): - assert get_new_command(Command('systemctl nginx start'), None) == "systemctl start nginx" - assert get_new_command(Command('sudo systemctl nginx start'), None) == "sudo systemctl start nginx" + assert get_new_command(Command('systemctl nginx start')) == "systemctl start nginx" + assert get_new_command(Command('sudo systemctl nginx start')) == "sudo systemctl start nginx" diff --git a/tests/rules/test_tmux.py b/tests/rules/test_tmux.py index 963e9f1d8..51357b626 100644 --- a/tests/rules/test_tmux.py +++ b/tests/rules/test_tmux.py @@ -11,9 +11,9 @@ def tmux_ambiguous(): def test_match(tmux_ambiguous): - assert match(Command('tmux list', stderr=tmux_ambiguous), None) + assert match(Command('tmux list', stderr=tmux_ambiguous)) def test_get_new_command(tmux_ambiguous): - assert get_new_command(Command('tmux list', stderr=tmux_ambiguous), None)\ + assert get_new_command(Command('tmux list', stderr=tmux_ambiguous))\ == ['tmux list-keys', 'tmux list-panes', 'tmux list-windows'] diff --git a/tests/rules/test_tsuru_login.py b/tests/rules/test_tsuru_login.py index a1a7aa140..6a2059b69 100644 --- a/tests/rules/test_tsuru_login.py +++ b/tests/rules/test_tsuru_login.py @@ -15,7 +15,7 @@ Command(script='tsuru app-log -f', stderr=error_msg[1]), ]) def test_match(command): - assert match(command, {}) + assert match(command) @pytest.mark.parametrize('command', [ @@ -24,7 +24,7 @@ def test_match(command): Command(script='tsuru app-log -f', stderr=('Error: unparseable data')), ]) def test_not_match(command): - assert not match(command, {}) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -34,4 +34,4 @@ def test_not_match(command): 'tsuru login && tsuru app-log -f'), ]) def test_get_new_command(command, new_command): - assert get_new_command(command, {}) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_tsuru_not_command.py b/tests/rules/test_tsuru_not_command.py index 80baf7e47..635c922dc 100644 --- a/tests/rules/test_tsuru_not_command.py +++ b/tests/rules/test_tsuru_not_command.py @@ -30,7 +30,7 @@ )), ]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -58,7 +58,7 @@ def test_match(command): Command('tsuru env-get', stderr='Error: App thefuck not found.'), ]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_commands', [ @@ -87,4 +87,4 @@ def test_not_match(command): )), ['tsuru target-list']), ]) def test_get_new_command(command, new_commands): - assert get_new_command(command, None) == new_commands + assert get_new_command(command) == new_commands diff --git a/tests/rules/test_unknown_command.py b/tests/rules/test_unknown_command.py index a31c9d9ca..3416b33ab 100644 --- a/tests/rules/test_unknown_command.py +++ b/tests/rules/test_unknown_command.py @@ -9,7 +9,7 @@ stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), Command(script='hdfs dfs ls /foo/bar', stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -18,7 +18,7 @@ def test_match(command): Command(script='hdfs dfs -ls -R /foo/bar', stderr=''), Command()]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -31,5 +31,5 @@ def test_not_match(command): (Command('./bin/hdfs dfs -Dtest=fred ls -R /foo/bar', stderr='ls: Unknown command\nDid you mean -ls? This command begins with a dash.'), ['./bin/hdfs dfs -Dtest=fred -ls -R /foo/bar'])]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_vagrant_up.py b/tests/rules/test_vagrant_up.py index 1a7c9022e..66f2ebfa5 100644 --- a/tests/rules/test_vagrant_up.py +++ b/tests/rules/test_vagrant_up.py @@ -11,7 +11,7 @@ Command(script='vagrant rdp devbox', stderr='VM must be created before running this command. Run `vagrant up` first.')]) def test_match(command): - assert match(command, None) + assert match(command) @pytest.mark.parametrize('command', [ @@ -20,7 +20,7 @@ def test_match(command): Command(script='vagrant ssh', stderr='A Vagrant environment or target machine is required to run this command. Run `vagrant init` to create a new Vagrant environment. Or, get an ID of a target machine from `vagrant global-status` to run this command on. A final option is to change to a directory with a Vagrantfile and to try again.'), Command()]) def test_not_match(command): - assert not match(command, None) + assert not match(command) @pytest.mark.parametrize('command, new_command', [ @@ -31,5 +31,5 @@ def test_not_match(command): (Command(script='vagrant rdp devbox', stderr='VM must be created before running this command. Run `vagrant up` first.'), ['vagrant up devbox && vagrant rdp devbox', 'vagrant up && vagrant rdp devbox'])]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/rules/test_whois.py b/tests/rules/test_whois.py index bb64b1b83..2426c9fe0 100644 --- a/tests/rules/test_whois.py +++ b/tests/rules/test_whois.py @@ -8,11 +8,11 @@ Command(script='whois https://en.wikipedia.org/'), Command(script='whois meta.unix.stackexchange.com')]) def test_match(command): - assert match(command, None) + assert match(command) def test_not_match(): - assert not match(Command(script='whois'), None) + assert not match(Command(script='whois')) # `whois com` actually makes sense @@ -23,4 +23,4 @@ def test_not_match(): 'whois stackexchange.com', 'whois com'])]) def test_get_new_command(command, new_command): - assert get_new_command(command, None) == new_command + assert get_new_command(command) == new_command diff --git a/tests/specific/test_git.py b/tests/specific/test_git.py index 549ce61cd..8e1e61bc3 100644 --- a/tests/specific/test_git.py +++ b/tests/specific/test_git.py @@ -9,9 +9,10 @@ "19:23:25.470911 git.c:282 trace: alias expansion: com => 'commit' '--verbose'")]) def test_git_support(called, command, stderr): @git_support - def fn(command, settings): return command.script + def fn(command): + return command.script - assert fn(Command(script=called, stderr=stderr), None) == command + assert fn(Command(script=called, stderr=stderr)) == command @pytest.mark.parametrize('command, is_git', [ @@ -24,6 +25,7 @@ def fn(command, settings): return command.script ('cat hub', False)]) def test_git_support_match(command, is_git): @git_support - def fn(command, settings): return True + def fn(command): + return True - assert fn(Command(script=command), None) == is_git + assert fn(Command(script=command)) == is_git diff --git a/tests/specific/test_sudo.py b/tests/specific/test_sudo.py index b82433228..bbc3d3603 100644 --- a/tests/specific/test_sudo.py +++ b/tests/specific/test_sudo.py @@ -13,8 +13,8 @@ (False, 'sudo ls', 'ls', False), (False, 'ls', 'ls', False)]) def test_sudo_support(return_value, command, called, result): - def fn(command, settings): + def fn(command): assert command == Command(called) return return_value - assert sudo_support(fn)(Command(command), None) == result + assert sudo_support(fn)(Command(command)) == result diff --git a/tests/test_corrector.py b/tests/test_corrector.py index f84e7d18e..61a6d06bc 100644 --- a/tests/test_corrector.py +++ b/tests/test_corrector.py @@ -61,10 +61,10 @@ def test_get_rules(self, glob, settings, paths, conf_rules, exclude_rules, class TestIsRuleMatch(object): def test_no_match(self): assert not corrector.is_rule_match( - Command('ls'), Rule('', lambda *_: False)) + Command('ls'), Rule('', lambda _: False)) def test_match(self): - rule = Rule('', lambda x, _: x.script == 'cd ..') + rule = Rule('', lambda x: x.script == 'cd ..') assert corrector.is_rule_match(Command('cd ..'), rule) @pytest.mark.usefixtures('no_colors') @@ -77,25 +77,25 @@ def test_when_rule_failed(self, capsys): class TestMakeCorrectedCommands(object): def test_with_rule_returns_list(self): - rule = Rule(get_new_command=lambda x, _: [x.script + '!', x.script + '@'], + rule = Rule(get_new_command=lambda x: [x.script + '!', x.script + '@'], priority=100) assert list(make_corrected_commands(Command(script='test'), rule)) \ == [CorrectedCommand(script='test!', priority=100), CorrectedCommand(script='test@', priority=200)] def test_with_rule_returns_command(self): - rule = Rule(get_new_command=lambda x, _: x.script + '!', + rule = Rule(get_new_command=lambda x: x.script + '!', priority=100) assert list(make_corrected_commands(Command(script='test'), rule)) \ == [CorrectedCommand(script='test!', priority=100)] def test_get_corrected_commands(mocker): command = Command('test', 'test', 'test') - rules = [Rule(match=lambda *_: False), - Rule(match=lambda *_: True, - get_new_command=lambda x, _: x.script + '!', priority=100), - Rule(match=lambda *_: True, - get_new_command=lambda x, _: [x.script + '@', x.script + ';'], + rules = [Rule(match=lambda _: False), + Rule(match=lambda _: True, + get_new_command=lambda x: x.script + '!', priority=100), + Rule(match=lambda _: True, + get_new_command=lambda x: [x.script + '@', x.script + ';'], priority=60)] mocker.patch('thefuck.corrector.get_rules', return_value=rules) assert [cmd.script for cmd in get_corrected_commands(command, None)] \ diff --git a/tests/test_utils.py b/tests/test_utils.py index 3566b4f5f..13bd99ab2 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -3,8 +3,7 @@ import six from thefuck.utils import default_settings, \ memoize, get_closest, get_all_executables, replace_argument, \ - get_all_matched_commands, is_app, for_app, cache -from thefuck.types import Settings + get_all_matched_commands, is_app, for_app, cache, compatibility_call from tests.utils import Command @@ -12,9 +11,12 @@ ({'key': 'val'}, {}, {'key': 'val'}), ({'key': 'new-val'}, {'key': 'val'}, {'key': 'val'}), ({'key': 'new-val', 'unset': 'unset'}, {'key': 'val'}, {'key': 'val', 'unset': 'unset'})]) -def test_default_settings(override, old, new): - fn = lambda _, settings: settings - assert default_settings(override)(fn)(None, Settings(old)) == new +def test_default_settings(settings, override, old, new): + settings.clear() + settings.update(old) + fn = lambda _: _ + default_settings(override)(fn)(None) + assert settings == new def test_memoize(): @@ -112,10 +114,10 @@ def test_is_app(script, names, result): ('hg diff', ['git', 'hub'], False)]) def test_for_app(script, names, result): @for_app(*names) - def match(command, settings): + def match(command): return True - assert match(Command(script), None) == result + assert match(Command(script)) == result class TestCache(object): @@ -180,3 +182,50 @@ def test_when_etag_changed(self, shelve, fn, key): shelve.update({key: {'etag': '-1', 'value': 'old-value'}}) assert fn() == 'test' assert shelve == {key: {'etag': '0', 'value': 'test'}} + + +class TestCompatibilityCall(object): + def test_match(self): + def match(command): + assert command == Command() + return True + + assert compatibility_call(match, Command()) + + def test_old_match(self, settings): + def match(command, _settings): + assert command == Command() + assert settings == _settings + return True + + assert compatibility_call(match, Command()) + + def test_get_new_command(self): + def get_new_command(command): + assert command == Command() + return True + + assert compatibility_call(get_new_command, Command()) + + def test_old_get_new_command(self, settings): + def get_new_command(command, _settings): + assert command == Command() + assert settings == _settings + return True + + assert compatibility_call(get_new_command, Command()) + + def test_side_effect(self): + def side_effect(command, new_command): + assert command == Command() == new_command + return True + + assert compatibility_call(side_effect, Command(), Command()) + + def test_old_side_effect(self, settings): + def side_effect(command, new_command, _settings): + assert command == Command() == new_command + assert settings == _settings + return True + + assert compatibility_call(side_effect, Command(), Command()) diff --git a/thefuck/corrector.py b/thefuck/corrector.py index c1477a57c..142576845 100644 --- a/thefuck/corrector.py +++ b/thefuck/corrector.py @@ -3,6 +3,7 @@ from pathlib import Path from .conf import settings, DEFAULT_PRIORITY from .types import Rule, CorrectedCommand, SortedCorrectedCommandsSequence +from .utils import compatibility_call from . import logs @@ -49,14 +50,14 @@ def is_rule_match(command, rule): try: with logs.debug_time(u'Trying rule: {};'.format(rule.name)): - if rule.match(command, settings): + if compatibility_call(rule.match, command): return True except Exception: logs.rule_failed(rule, sys.exc_info()) def make_corrected_commands(command, rule): - new_commands = rule.get_new_command(command, settings) + new_commands = compatibility_call(rule.get_new_command, command) if not isinstance(new_commands, list): new_commands = (new_commands,) for n, new_command in enumerate(new_commands): diff --git a/thefuck/main.py b/thefuck/main.py index 262dcee5f..497d97e74 100644 --- a/thefuck/main.py +++ b/thefuck/main.py @@ -13,6 +13,7 @@ from . import logs, types, shells from .conf import initialize_settings_file, init_settings, settings from .corrector import get_corrected_commands +from .utils import compatibility_call from .ui import select_command @@ -77,7 +78,7 @@ def get_command(args): def run_command(old_cmd, command): """Runs command from rule for passed command.""" if command.side_effect: - command.side_effect(old_cmd, command.script, settings) + compatibility_call(command.side_effect, old_cmd, command.script) shells.put_to_history(command.script) print(command.script) diff --git a/thefuck/rules/apt_get.py b/thefuck/rules/apt_get.py index 7dc306f26..883687c36 100644 --- a/thefuck/rules/apt_get.py +++ b/thefuck/rules/apt_get.py @@ -20,11 +20,11 @@ def get_package(command): return None -def match(command, settings): +def match(command): return 'not found' in command.stderr and get_package(command.script) -def get_new_command(command, settings): +def get_new_command(command): name = get_package(command.script) formatme = shells.and_('sudo apt-get install {}', '{}') return formatme.format(name, command.script) diff --git a/thefuck/rules/apt_get_search.py b/thefuck/rules/apt_get_search.py index 4454e85f0..edc893760 100644 --- a/thefuck/rules/apt_get_search.py +++ b/thefuck/rules/apt_get_search.py @@ -3,9 +3,9 @@ @for_app('apt-get') -def match(command, settings): +def match(command): return command.script.startswith('apt-get search') -def get_new_command(command, settings): +def get_new_command(command): return re.sub(r'^apt-get', 'apt-cache', command.script) diff --git a/thefuck/rules/brew_install.py b/thefuck/rules/brew_install.py index a1432b030..3a42fdd40 100644 --- a/thefuck/rules/brew_install.py +++ b/thefuck/rules/brew_install.py @@ -24,7 +24,7 @@ def _get_similar_formula(formula_name): return get_closest(formula_name, _get_formulas(), 1, 0.85) -def match(command, settings): +def match(command): is_proper_command = ('brew install' in command.script and 'No available formula' in command.stderr) @@ -35,7 +35,7 @@ def match(command, settings): return False -def get_new_command(command, settings): +def get_new_command(command): not_exist_formula = re.findall(r'Error: No available formula for ([a-z]+)', command.stderr)[0] exist_formula = _get_similar_formula(not_exist_formula) diff --git a/thefuck/rules/brew_unknown_command.py b/thefuck/rules/brew_unknown_command.py index d798a7be3..29fe6dc8f 100644 --- a/thefuck/rules/brew_unknown_command.py +++ b/thefuck/rules/brew_unknown_command.py @@ -63,7 +63,7 @@ def _brew_commands(): 'doctor', 'create', 'edit'] -def match(command, settings): +def match(command): is_proper_command = ('brew' in command.script and 'Unknown command' in command.stderr) @@ -74,7 +74,7 @@ def match(command, settings): return False -def get_new_command(command, settings): +def get_new_command(command): broken_cmd = re.findall(r'Error: Unknown command: ([a-z]+)', command.stderr)[0] return replace_command(command, broken_cmd, _brew_commands()) diff --git a/thefuck/rules/brew_upgrade.py b/thefuck/rules/brew_upgrade.py index 2022088cb..d188943b4 100644 --- a/thefuck/rules/brew_upgrade.py +++ b/thefuck/rules/brew_upgrade.py @@ -6,9 +6,9 @@ # It currently upgrades all formula but this will soon change to require '--all'. -def match(command, settings): +def match(command): return command.script == 'brew upgrade' -def get_new_command(command, settings): +def get_new_command(command): return command.script + ' --all' diff --git a/thefuck/rules/cargo.py b/thefuck/rules/cargo.py index e8cee600b..3a0418d10 100644 --- a/thefuck/rules/cargo.py +++ b/thefuck/rules/cargo.py @@ -1,6 +1,6 @@ -def match(command, settings): +def match(command): return command.script == 'cargo' -def get_new_command(command, settings): +def get_new_command(command): return 'cargo build' diff --git a/thefuck/rules/cargo_no_command.py b/thefuck/rules/cargo_no_command.py index ce77fe6e3..76eec3cba 100644 --- a/thefuck/rules/cargo_no_command.py +++ b/thefuck/rules/cargo_no_command.py @@ -3,12 +3,12 @@ @for_app('cargo') -def match(command, settings): +def match(command): return ('No such subcommand' in command.stderr and 'Did you mean' in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): broken = command.script.split()[1] fix = re.findall(r'Did you mean `([^`]*)`', command.stderr)[0] diff --git a/thefuck/rules/cd_correction.py b/thefuck/rules/cd_correction.py index 33c4fc309..24c700672 100644 --- a/thefuck/rules/cd_correction.py +++ b/thefuck/rules/cd_correction.py @@ -18,7 +18,7 @@ def _get_sub_dirs(parent): @sudo_support @for_app('cd') -def match(command, settings): +def match(command): """Match function copied from cd_mkdir.py""" return (command.script.startswith('cd ') and ('no such file or directory' in command.stderr.lower() @@ -26,7 +26,7 @@ def match(command, settings): @sudo_support -def get_new_command(command, settings): +def get_new_command(command): """ Attempt to rebuild the path string by spellchecking the directories. If it fails (i.e. no directories are a close enough match), then it @@ -47,7 +47,7 @@ def get_new_command(command, settings): if best_matches: cwd = os.path.join(cwd, best_matches[0]) else: - return cd_mkdir.get_new_command(command, settings) + return cd_mkdir.get_new_command(command) return 'cd "{0}"'.format(cwd) diff --git a/thefuck/rules/cd_mkdir.py b/thefuck/rules/cd_mkdir.py index 2262af74b..e47479e2f 100644 --- a/thefuck/rules/cd_mkdir.py +++ b/thefuck/rules/cd_mkdir.py @@ -6,12 +6,12 @@ @sudo_support @for_app('cd') -def match(command, settings): +def match(command): return (('no such file or directory' in command.stderr.lower() or 'cd: can\'t cd to' in command.stderr.lower())) @sudo_support -def get_new_command(command, settings): +def get_new_command(command): repl = shells.and_('mkdir -p \\1', 'cd \\1') return re.sub(r'^cd (.*)', repl, command.script) diff --git a/thefuck/rules/cd_parent.py b/thefuck/rules/cd_parent.py index 7b1faedbc..f808f0df7 100644 --- a/thefuck/rules/cd_parent.py +++ b/thefuck/rules/cd_parent.py @@ -8,9 +8,9 @@ # cd..: command not found -def match(command, settings): +def match(command): return command.script == 'cd..' -def get_new_command(command, settings): +def get_new_command(command): return 'cd ..' diff --git a/thefuck/rules/composer_not_command.py b/thefuck/rules/composer_not_command.py index abea7b34f..e96e349a4 100644 --- a/thefuck/rules/composer_not_command.py +++ b/thefuck/rules/composer_not_command.py @@ -3,12 +3,12 @@ @for_app('composer') -def match(command, settings): +def match(command): return (('did you mean this?' in command.stderr.lower() or 'did you mean one of these?' in command.stderr.lower())) -def get_new_command(command, settings): +def get_new_command(command): broken_cmd = re.findall(r"Command \"([^']*)\" is not defined", command.stderr)[0] new_cmd = re.findall(r'Did you mean this\?[^\n]*\n\s*([^\n]*)', command.stderr) if not new_cmd: diff --git a/thefuck/rules/cp_omitting_directory.py b/thefuck/rules/cp_omitting_directory.py index 51fa1294c..66c7f8dbf 100644 --- a/thefuck/rules/cp_omitting_directory.py +++ b/thefuck/rules/cp_omitting_directory.py @@ -5,11 +5,11 @@ @sudo_support @for_app('cp') -def match(command, settings): +def match(command): stderr = command.stderr.lower() return 'omitting directory' in stderr or 'is a directory' in stderr @sudo_support -def get_new_command(command, settings): +def get_new_command(command): return re.sub(r'^cp', 'cp -a', command.script) diff --git a/thefuck/rules/cpp11.py b/thefuck/rules/cpp11.py index 200bf4d9d..c30012ac9 100644 --- a/thefuck/rules/cpp11.py +++ b/thefuck/rules/cpp11.py @@ -2,11 +2,11 @@ @for_app(['g++', 'clang++']) -def match(command, settings): +def match(command): return ('This file requires compiler and library support for the ' 'ISO C++ 2011 standard.' in command.stderr or '-Wc++11-extensions' in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): return command.script + ' -std=c++11' diff --git a/thefuck/rules/dirty_untar.py b/thefuck/rules/dirty_untar.py index 4fdf4cf6e..7e6a2719b 100644 --- a/thefuck/rules/dirty_untar.py +++ b/thefuck/rules/dirty_untar.py @@ -25,18 +25,18 @@ def _tar_file(cmd): @for_app('tar') -def match(command, settings): +def match(command): return ('-C' not in command.script and _is_tar_extract(command.script) and _tar_file(command.script) is not None) -def get_new_command(command, settings): +def get_new_command(command): return shells.and_('mkdir -p {dir}', '{cmd} -C {dir}') \ .format(dir=_tar_file(command.script)[1], cmd=command.script) -def side_effect(old_cmd, command, settings): +def side_effect(old_cmd, command): with tarfile.TarFile(_tar_file(old_cmd.script)[0]) as archive: for file in archive.getnames(): os.remove(file) diff --git a/thefuck/rules/dirty_unzip.py b/thefuck/rules/dirty_unzip.py index bd2d59458..99f4bf5a7 100644 --- a/thefuck/rules/dirty_unzip.py +++ b/thefuck/rules/dirty_unzip.py @@ -22,16 +22,16 @@ def _zip_file(command): @for_app('unzip') -def match(command, settings): +def match(command): return ('-d' not in command.script and _is_bad_zip(_zip_file(command))) -def get_new_command(command, settings): +def get_new_command(command): return '{} -d {}'.format(command.script, _zip_file(command)[:-4]) -def side_effect(old_cmd, command, settings): +def side_effect(old_cmd, command): with zipfile.ZipFile(_zip_file(old_cmd), 'r') as archive: for file in archive.namelist(): os.remove(file) diff --git a/thefuck/rules/django_south_ghost.py b/thefuck/rules/django_south_ghost.py index d3290c4a5..fda221c60 100644 --- a/thefuck/rules/django_south_ghost.py +++ b/thefuck/rules/django_south_ghost.py @@ -1,8 +1,8 @@ -def match(command, settings): +def match(command): return 'manage.py' in command.script and \ 'migrate' in command.script \ and 'or pass --delete-ghost-migrations' in command.stderr -def get_new_command(command, settings): +def get_new_command(command): return u'{} --delete-ghost-migrations'.format(command.script) diff --git a/thefuck/rules/django_south_merge.py b/thefuck/rules/django_south_merge.py index bef05970b..572d9daf8 100644 --- a/thefuck/rules/django_south_merge.py +++ b/thefuck/rules/django_south_merge.py @@ -1,8 +1,8 @@ -def match(command, settings): +def match(command): return 'manage.py' in command.script and \ 'migrate' in command.script \ and '--merge: will just attempt the migration' in command.stderr -def get_new_command(command, settings): +def get_new_command(command): return u'{} --merge'.format(command.script) diff --git a/thefuck/rules/docker_not_command.py b/thefuck/rules/docker_not_command.py index 44578e396..52003cf56 100644 --- a/thefuck/rules/docker_not_command.py +++ b/thefuck/rules/docker_not_command.py @@ -7,7 +7,7 @@ @sudo_support @for_app('docker') -def match(command, settings): +def match(command): return 'is not a docker command' in command.stderr @@ -21,7 +21,7 @@ def get_docker_commands(): @sudo_support -def get_new_command(command, settings): +def get_new_command(command): wrong_command = re.findall( r"docker: '(\w+)' is not a docker command.", command.stderr)[0] return replace_command(command, wrong_command, get_docker_commands()) diff --git a/thefuck/rules/dry.py b/thefuck/rules/dry.py index f0954ea68..075df04f3 100644 --- a/thefuck/rules/dry.py +++ b/thefuck/rules/dry.py @@ -1,10 +1,10 @@ -def match(command, settings): +def match(command): split_command = command.script.split() return len(split_command) >= 2 and split_command[0] == split_command[1] -def get_new_command(command, settings): +def get_new_command(command): return command.script[command.script.find(' ')+1:] # it should be rare enough to actually have to type twice the same word, so diff --git a/thefuck/rules/fix_alt_space.py b/thefuck/rules/fix_alt_space.py index f807c198c..2e64ec97a 100644 --- a/thefuck/rules/fix_alt_space.py +++ b/thefuck/rules/fix_alt_space.py @@ -5,11 +5,11 @@ @sudo_support -def match(command, settings): +def match(command): return ('command not found' in command.stderr.lower() and u' ' in command.script) @sudo_support -def get_new_command(command, settings): +def get_new_command(command): return re.sub(u' ', ' ', command.script) diff --git a/thefuck/rules/fix_file.py b/thefuck/rules/fix_file.py index 895244d85..7177c270a 100644 --- a/thefuck/rules/fix_file.py +++ b/thefuck/rules/fix_file.py @@ -1,6 +1,7 @@ import re import os from thefuck.utils import memoize, default_settings +from thefuck.conf import settings from thefuck import shells @@ -50,7 +51,7 @@ def _search(stderr): return m -def match(command, settings): +def match(command): if 'EDITOR' not in os.environ: return False @@ -58,8 +59,8 @@ def match(command, settings): @default_settings({'fixlinecmd': '{editor} {file} +{line}', - 'fixcolcmd': None}) -def get_new_command(command, settings): + 'fixcolcmd': None}) +def get_new_command(command): m = _search(command.stderr) or _search(command.stdout) # Note: there does not seem to be a standard for columns, so they are just diff --git a/thefuck/rules/git_add.py b/thefuck/rules/git_add.py index 617491f3c..452797b03 100644 --- a/thefuck/rules/git_add.py +++ b/thefuck/rules/git_add.py @@ -4,13 +4,13 @@ @git_support -def match(command, settings): +def match(command): return ('did not match any file(s) known to git.' in command.stderr and "Did you forget to 'git add'?" in command.stderr) @git_support -def get_new_command(command, settings): +def get_new_command(command): missing_file = re.findall( r"error: pathspec '([^']*)' " r"did not match any file\(s\) known to git.", command.stderr)[0] diff --git a/thefuck/rules/git_branch_delete.py b/thefuck/rules/git_branch_delete.py index d334c08b3..2fb83d015 100644 --- a/thefuck/rules/git_branch_delete.py +++ b/thefuck/rules/git_branch_delete.py @@ -3,11 +3,11 @@ @git_support -def match(command, settings): +def match(command): return ('branch -d' in command.script and 'If you are sure you want to delete it' in command.stderr) @git_support -def get_new_command(command, settings): +def get_new_command(command): return replace_argument(command.script, '-d', '-D') diff --git a/thefuck/rules/git_branch_list.py b/thefuck/rules/git_branch_list.py index 25e4aaac3..d40ef98d2 100644 --- a/thefuck/rules/git_branch_list.py +++ b/thefuck/rules/git_branch_list.py @@ -3,11 +3,11 @@ @git_support -def match(command, settings): +def match(command): # catches "git branch list" in place of "git branch" return command.script.split()[1:] == 'branch list'.split() @git_support -def get_new_command(command, settings): +def get_new_command(command): return shells.and_('git branch --delete list', 'git branch') diff --git a/thefuck/rules/git_checkout.py b/thefuck/rules/git_checkout.py index de165fa59..d0869c104 100644 --- a/thefuck/rules/git_checkout.py +++ b/thefuck/rules/git_checkout.py @@ -6,7 +6,7 @@ @git_support -def match(command, settings): +def match(command): return ('did not match any file(s) known to git.' in command.stderr and "Did you forget to 'git add'?" not in command.stderr) @@ -25,7 +25,7 @@ def get_branches(): @git_support -def get_new_command(command, settings): +def get_new_command(command): missing_file = re.findall( r"error: pathspec '([^']*)' " r"did not match any file\(s\) known to git.", command.stderr)[0] diff --git a/thefuck/rules/git_diff_staged.py b/thefuck/rules/git_diff_staged.py index bdb3ba604..8afd29f77 100644 --- a/thefuck/rules/git_diff_staged.py +++ b/thefuck/rules/git_diff_staged.py @@ -3,11 +3,11 @@ @git_support -def match(command, settings): +def match(command): return ('diff' in command.script and '--staged' not in command.script) @git_support -def get_new_command(command, settings): +def get_new_command(command): return replace_argument(command.script, 'diff', 'diff --staged') diff --git a/thefuck/rules/git_fix_stash.py b/thefuck/rules/git_fix_stash.py index b83b539ef..8cf6ae32e 100644 --- a/thefuck/rules/git_fix_stash.py +++ b/thefuck/rules/git_fix_stash.py @@ -4,7 +4,7 @@ @git_support -def match(command, settings): +def match(command): return (command.script.split()[1] == 'stash' and 'usage:' in command.stderr) @@ -21,7 +21,7 @@ def match(command, settings): @git_support -def get_new_command(command, settings): +def get_new_command(command): stash_cmd = command.script.split()[2] fixed = utils.get_closest(stash_cmd, stash_commands, fallback_to_first=False) diff --git a/thefuck/rules/git_not_command.py b/thefuck/rules/git_not_command.py index 6c6675ff0..cfc8106b7 100644 --- a/thefuck/rules/git_not_command.py +++ b/thefuck/rules/git_not_command.py @@ -4,13 +4,13 @@ @git_support -def match(command, settings): +def match(command): return (" is not a git command. See 'git --help'." in command.stderr and 'Did you mean' in command.stderr) @git_support -def get_new_command(command, settings): +def get_new_command(command): broken_cmd = re.findall(r"git: '([^']*)' is not a git command", command.stderr)[0] matched = get_all_matched_commands(command.stderr) diff --git a/thefuck/rules/git_pull.py b/thefuck/rules/git_pull.py index 426e34207..3c04f7d27 100644 --- a/thefuck/rules/git_pull.py +++ b/thefuck/rules/git_pull.py @@ -3,13 +3,13 @@ @git_support -def match(command, settings): +def match(command): return ('pull' in command.script and 'set-upstream' in command.stderr) @git_support -def get_new_command(command, settings): +def get_new_command(command): line = command.stderr.split('\n')[-3].strip() branch = line.split(' ')[-1] set_upstream = line.replace('', 'origin')\ diff --git a/thefuck/rules/git_pull_clone.py b/thefuck/rules/git_pull_clone.py index a2d1cfb29..7d5132949 100644 --- a/thefuck/rules/git_pull_clone.py +++ b/thefuck/rules/git_pull_clone.py @@ -3,11 +3,11 @@ @git_support -def match(command, settings): +def match(command): return ('fatal: Not a git repository' in command.stderr and "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)." in command.stderr) @git_support -def get_new_command(command, settings): +def get_new_command(command): return replace_argument(command.script, 'pull', 'clone') diff --git a/thefuck/rules/git_push.py b/thefuck/rules/git_push.py index badce6d69..222371050 100644 --- a/thefuck/rules/git_push.py +++ b/thefuck/rules/git_push.py @@ -2,11 +2,11 @@ @git_support -def match(command, settings): +def match(command): return ('push' in command.script and 'set-upstream' in command.stderr) @git_support -def get_new_command(command, settings): +def get_new_command(command): return command.stderr.split('\n')[-3].strip() diff --git a/thefuck/rules/git_push_force.py b/thefuck/rules/git_push_force.py index 45a3085aa..1bb23f89d 100644 --- a/thefuck/rules/git_push_force.py +++ b/thefuck/rules/git_push_force.py @@ -3,7 +3,7 @@ @git_support -def match(command, settings): +def match(command): return ('push' in command.script and '! [rejected]' in command.stderr and 'failed to push some refs to' in command.stderr @@ -11,7 +11,7 @@ def match(command, settings): @git_support -def get_new_command(command, settings): +def get_new_command(command): return replace_argument(command.script, 'push', 'push --force') diff --git a/thefuck/rules/git_push_pull.py b/thefuck/rules/git_push_pull.py index 897406b73..8560198ec 100644 --- a/thefuck/rules/git_push_pull.py +++ b/thefuck/rules/git_push_pull.py @@ -4,7 +4,7 @@ @git_support -def match(command, settings): +def match(command): return ('push' in command.script and '! [rejected]' in command.stderr and 'failed to push some refs to' in command.stderr @@ -12,6 +12,6 @@ def match(command, settings): @git_support -def get_new_command(command, settings): +def get_new_command(command): return shells.and_(replace_argument(command.script, 'push', 'pull'), command.script) diff --git a/thefuck/rules/git_stash.py b/thefuck/rules/git_stash.py index c0bad412b..df7f3850a 100644 --- a/thefuck/rules/git_stash.py +++ b/thefuck/rules/git_stash.py @@ -3,13 +3,13 @@ @git_support -def match(command, settings): +def match(command): # catches "Please commit or stash them" and "Please, commit your changes or # stash them before you can switch branches." return 'or stash them' in command.stderr @git_support -def get_new_command(command, settings): +def get_new_command(command): formatme = shells.and_('git stash', '{}') return formatme.format(command.script) diff --git a/thefuck/rules/go_run.py b/thefuck/rules/go_run.py index b009324bc..30db699b4 100644 --- a/thefuck/rules/go_run.py +++ b/thefuck/rules/go_run.py @@ -7,10 +7,10 @@ @for_app('go') -def match(command, settings): +def match(command): return (command.script.startswith('go run ') and not command.script.endswith('.go')) -def get_new_command(command, settings): +def get_new_command(command): return command.script + '.go' diff --git a/thefuck/rules/grep_recursive.py b/thefuck/rules/grep_recursive.py index 94547b269..af92300dc 100644 --- a/thefuck/rules/grep_recursive.py +++ b/thefuck/rules/grep_recursive.py @@ -2,9 +2,9 @@ @for_app('grep') -def match(command, settings): +def match(command): return 'is a directory' in command.stderr.lower() -def get_new_command(command, settings): +def get_new_command(command): return 'grep -r {}'.format(command.script[5:]) diff --git a/thefuck/rules/gulp_not_task.py b/thefuck/rules/gulp_not_task.py index 853fa609c..8d207079a 100644 --- a/thefuck/rules/gulp_not_task.py +++ b/thefuck/rules/gulp_not_task.py @@ -4,7 +4,7 @@ @for_app('gulp') -def match(command, script): +def match(command): return 'is not in your gulpfile' in command.stdout @@ -15,7 +15,7 @@ def get_gulp_tasks(): for line in proc.stdout.readlines()] -def get_new_command(command, script): +def get_new_command(command): wrong_task = re.findall(r"Task '(\w+)' is not in your gulpfile", command.stdout)[0] return replace_command(command, wrong_task, get_gulp_tasks()) diff --git a/thefuck/rules/has_exists_script.py b/thefuck/rules/has_exists_script.py index 3413237fc..0ffc08600 100644 --- a/thefuck/rules/has_exists_script.py +++ b/thefuck/rules/has_exists_script.py @@ -3,11 +3,11 @@ @sudo_support -def match(command, settings): +def match(command): return os.path.exists(command.script.split()[0]) \ and 'command not found' in command.stderr @sudo_support -def get_new_command(command, settings): +def get_new_command(command): return u'./{}'.format(command.script) diff --git a/thefuck/rules/heroku_not_command.py b/thefuck/rules/heroku_not_command.py index a01e15773..48c322a07 100644 --- a/thefuck/rules/heroku_not_command.py +++ b/thefuck/rules/heroku_not_command.py @@ -3,7 +3,7 @@ @for_app('heroku') -def match(command, settings): +def match(command): return 'is not a heroku command' in command.stderr and \ 'Perhaps you meant' in command.stderr @@ -14,6 +14,6 @@ def _get_suggests(stderr): return re.findall(r'`([^`]+)`', line) -def get_new_command(command, settings): +def get_new_command(command): wrong = re.findall(r'`(\w+)` is not a heroku command', command.stderr)[0] return replace_command(command, wrong, _get_suggests(command.stderr)) diff --git a/thefuck/rules/history.py b/thefuck/rules/history.py index 1fd011b09..0f187d993 100644 --- a/thefuck/rules/history.py +++ b/thefuck/rules/history.py @@ -24,12 +24,12 @@ def _history_of_exists_without_current(command): and line.split(' ')[0] in executables] -def match(command, settings): +def match(command): return len(get_close_matches(command.script, _history_of_exists_without_current(command))) -def get_new_command(command, settings): +def get_new_command(command): return get_closest(command.script, _history_of_exists_without_current(command)) diff --git a/thefuck/rules/java.py b/thefuck/rules/java.py index f7a33c742..264be4320 100644 --- a/thefuck/rules/java.py +++ b/thefuck/rules/java.py @@ -9,9 +9,9 @@ @for_app('java') -def match(command, settings): +def match(command): return command.script.endswith('.java') -def get_new_command(command, settings): +def get_new_command(command): return command.script[:-5] diff --git a/thefuck/rules/javac.py b/thefuck/rules/javac.py index be40a5e72..07c08172c 100644 --- a/thefuck/rules/javac.py +++ b/thefuck/rules/javac.py @@ -10,9 +10,9 @@ @for_app('javac') -def match(command, settings): +def match(command): return not command.script.endswith('.java') -def get_new_command(command, settings): +def get_new_command(command): return command.script + '.java' diff --git a/thefuck/rules/lein_not_task.py b/thefuck/rules/lein_not_task.py index 3849ac553..7118080e7 100644 --- a/thefuck/rules/lein_not_task.py +++ b/thefuck/rules/lein_not_task.py @@ -5,14 +5,14 @@ @sudo_support @for_app('lein') -def match(command, settings): +def match(command): return (command.script.startswith('lein') and "is not a task. See 'lein help'" in command.stderr and 'Did you mean this?' in command.stderr) @sudo_support -def get_new_command(command, settings): +def get_new_command(command): broken_cmd = re.findall(r"'([^']*)' is not a task", command.stderr)[0] new_cmds = get_all_matched_commands(command.stderr, 'Did you mean this?') diff --git a/thefuck/rules/ls_lah.py b/thefuck/rules/ls_lah.py index b8e6590b0..54b6d6514 100644 --- a/thefuck/rules/ls_lah.py +++ b/thefuck/rules/ls_lah.py @@ -2,11 +2,11 @@ @for_app('ls') -def match(command, settings): +def match(command): return 'ls -' not in command.script -def get_new_command(command, settings): +def get_new_command(command): command = command.script.split(' ') command[0] = 'ls -lah' return ' '.join(command) diff --git a/thefuck/rules/man.py b/thefuck/rules/man.py index 869350c7c..84427e795 100644 --- a/thefuck/rules/man.py +++ b/thefuck/rules/man.py @@ -1,8 +1,8 @@ -def match(command, settings): +def match(command): return command.script.strip().startswith('man ') -def get_new_command(command, settings): +def get_new_command(command): if '3' in command.script: return command.script.replace("3", "2") if '2' in command.script: diff --git a/thefuck/rules/man_no_space.py b/thefuck/rules/man_no_space.py index 175135227..c5869345c 100644 --- a/thefuck/rules/man_no_space.py +++ b/thefuck/rules/man_no_space.py @@ -1,9 +1,9 @@ -def match(command, settings): +def match(command): return (command.script.startswith(u'man') and u'command not found' in command.stderr.lower()) -def get_new_command(command, settings): +def get_new_command(command): return u'man {}'.format(command.script[3:]) priority = 2000 diff --git a/thefuck/rules/mercurial.py b/thefuck/rules/mercurial.py index 338629aae..c8290fb58 100644 --- a/thefuck/rules/mercurial.py +++ b/thefuck/rules/mercurial.py @@ -13,14 +13,14 @@ def extract_possibilities(command): @for_app('hg') -def match(command, settings): +def match(command): return ('hg: unknown command' in command.stderr and '(did you mean one of ' in command.stderr or "hg: command '" in command.stderr and "' is ambiguous:" in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): script = command.script.split(' ') possibilities = extract_possibilities(command) script[1] = get_closest(script[1], possibilities) diff --git a/thefuck/rules/mkdir_p.py b/thefuck/rules/mkdir_p.py index 013bfc163..40f59728d 100644 --- a/thefuck/rules/mkdir_p.py +++ b/thefuck/rules/mkdir_p.py @@ -3,11 +3,11 @@ @sudo_support -def match(command, settings): +def match(command): return ('mkdir' in command.script and 'No such file or directory' in command.stderr) @sudo_support -def get_new_command(command, settings): +def get_new_command(command): return re.sub('\\bmkdir (.*)', 'mkdir -p \\1', command.script) diff --git a/thefuck/rules/mvn_no_command.py b/thefuck/rules/mvn_no_command.py index 7113c5747..e489d00bc 100644 --- a/thefuck/rules/mvn_no_command.py +++ b/thefuck/rules/mvn_no_command.py @@ -2,10 +2,10 @@ @for_app('mvn') -def match(command, settings): +def match(command): return 'No goals have been specified for this build' in command.stdout -def get_new_command(command, settings): +def get_new_command(command): return [command.script + ' clean package', command.script + ' clean install'] diff --git a/thefuck/rules/mvn_unknown_lifecycle_phase.py b/thefuck/rules/mvn_unknown_lifecycle_phase.py index c4a7ee178..eb0ed52f9 100644 --- a/thefuck/rules/mvn_unknown_lifecycle_phase.py +++ b/thefuck/rules/mvn_unknown_lifecycle_phase.py @@ -14,13 +14,13 @@ def _getavailable_lifecycles(command): @for_app('mvn') -def match(command, settings): +def match(command): failed_lifecycle = _get_failed_lifecycle(command) available_lifecycles = _getavailable_lifecycles(command) return available_lifecycles and failed_lifecycle -def get_new_command(command, settings): +def get_new_command(command): failed_lifecycle = _get_failed_lifecycle(command) available_lifecycles = _getavailable_lifecycles(command) if available_lifecycles and failed_lifecycle: diff --git a/thefuck/rules/no_command.py b/thefuck/rules/no_command.py index 2e77594f1..5318568c7 100644 --- a/thefuck/rules/no_command.py +++ b/thefuck/rules/no_command.py @@ -4,14 +4,14 @@ @sudo_support -def match(command, settings): +def match(command): return 'not found' in command.stderr and \ bool(get_close_matches(command.script.split(' ')[0], get_all_executables())) @sudo_support -def get_new_command(command, settings): +def get_new_command(command): old_command = command.script.split(' ')[0] new_cmds = get_close_matches(old_command, get_all_executables(), cutoff=0.1) return [' '.join([new_command] + command.script.split(' ')[1:]) diff --git a/thefuck/rules/no_such_file.py b/thefuck/rules/no_such_file.py index 44572f19e..68a989b56 100644 --- a/thefuck/rules/no_such_file.py +++ b/thefuck/rules/no_such_file.py @@ -10,7 +10,7 @@ ) -def match(command, settings): +def match(command): for pattern in patterns: if re.search(pattern, command.stderr): return True @@ -18,7 +18,7 @@ def match(command, settings): return False -def get_new_command(command, settings): +def get_new_command(command): for pattern in patterns: file = re.findall(pattern, command.stderr) diff --git a/thefuck/rules/open.py b/thefuck/rules/open.py index 6de2c9639..b46f497d7 100644 --- a/thefuck/rules/open.py +++ b/thefuck/rules/open.py @@ -9,7 +9,7 @@ @for_app('open', 'xdg-open', 'gnome-open', 'kde-open') -def match(command, settings): +def match(command): return ('.com' in command.script or '.net' in command.script or '.org' in command.script @@ -22,5 +22,5 @@ def match(command, settings): or 'www.' in command.script) -def get_new_command(command, settings): +def get_new_command(command): return command.script.replace('open ', 'open http://') diff --git a/thefuck/rules/pacman.py b/thefuck/rules/pacman.py index 94257797e..67b5bd22e 100644 --- a/thefuck/rules/pacman.py +++ b/thefuck/rules/pacman.py @@ -2,11 +2,11 @@ from thefuck import shells -def match(command, settings): +def match(command): return 'not found' in command.stderr and get_pkgfile(command.script) -def get_new_command(command, settings): +def get_new_command(command): packages = get_pkgfile(command.script) formatme = shells.and_('{} -S {}', '{}') diff --git a/thefuck/rules/pacman_not_found.py b/thefuck/rules/pacman_not_found.py index d8159b26e..9875935b8 100644 --- a/thefuck/rules/pacman_not_found.py +++ b/thefuck/rules/pacman_not_found.py @@ -10,12 +10,12 @@ from thefuck.specific.archlinux import get_pkgfile, archlinux_env -def match(command, settings): +def match(command): return (command.script.startswith(('pacman', 'sudo pacman', 'yaourt')) and 'error: target not found:' in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): pgr = command.script.split()[-1] return replace_command(command, pgr, get_pkgfile(pgr)) diff --git a/thefuck/rules/pip_unknown_command.py b/thefuck/rules/pip_unknown_command.py index 61293f800..af6a4dc6a 100644 --- a/thefuck/rules/pip_unknown_command.py +++ b/thefuck/rules/pip_unknown_command.py @@ -5,13 +5,13 @@ @sudo_support @for_app('pip') -def match(command, settings): +def match(command): return ('pip' in command.script and 'unknown command' in command.stderr and 'maybe you meant' in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): broken_cmd = re.findall(r'ERROR: unknown command \"([a-z]+)\"', command.stderr)[0] new_cmd = re.findall(r'maybe you meant \"([a-z]+)\"', command.stderr)[0] diff --git a/thefuck/rules/python_command.py b/thefuck/rules/python_command.py index 42cf18db0..95bbf021a 100644 --- a/thefuck/rules/python_command.py +++ b/thefuck/rules/python_command.py @@ -5,7 +5,7 @@ @sudo_support -def match(command, settings): +def match(command): toks = command.script.split() return (len(toks) > 0 and toks[0].endswith('.py') @@ -14,5 +14,5 @@ def match(command, settings): @sudo_support -def get_new_command(command, settings): +def get_new_command(command): return 'python ' + command.script diff --git a/thefuck/rules/python_execute.py b/thefuck/rules/python_execute.py index 2de751e96..23321e75e 100644 --- a/thefuck/rules/python_execute.py +++ b/thefuck/rules/python_execute.py @@ -7,9 +7,9 @@ @for_app('python') -def match(command, settings): +def match(command): return not command.script.endswith('.py') -def get_new_command(command, settings): +def get_new_command(command): return command.script + '.py' diff --git a/thefuck/rules/quotation_marks.py b/thefuck/rules/quotation_marks.py index c6d5e27a0..6ba491cf1 100644 --- a/thefuck/rules/quotation_marks.py +++ b/thefuck/rules/quotation_marks.py @@ -4,9 +4,9 @@ # > git commit -m 'My Message" -def match(command, settings): +def match(command): return '\'' in command.script and '\"' in command.script -def get_new_command(command, settings): +def get_new_command(command): return command.script.replace('\'', '\"') diff --git a/thefuck/rules/rm_dir.py b/thefuck/rules/rm_dir.py index 9a8baa77c..51cdff8fb 100644 --- a/thefuck/rules/rm_dir.py +++ b/thefuck/rules/rm_dir.py @@ -3,13 +3,13 @@ @sudo_support -def match(command, settings): +def match(command): return ('rm' in command.script and 'is a directory' in command.stderr.lower()) @sudo_support -def get_new_command(command, settings): +def get_new_command(command): arguments = '-rf' if 'hdfs' in command.script: arguments = '-r' diff --git a/thefuck/rules/rm_root.py b/thefuck/rules/rm_root.py index 9c89f3a7b..28e522f5a 100644 --- a/thefuck/rules/rm_root.py +++ b/thefuck/rules/rm_root.py @@ -4,12 +4,12 @@ @sudo_support -def match(command, settings): +def match(command): return ({'rm', '/'}.issubset(command.script.split()) and '--no-preserve-root' not in command.script and '--no-preserve-root' in command.stderr) @sudo_support -def get_new_command(command, settings): +def get_new_command(command): return u'{} --no-preserve-root'.format(command.script) diff --git a/thefuck/rules/sed_unterminated_s.py b/thefuck/rules/sed_unterminated_s.py index 5a8ea6d34..718d69400 100644 --- a/thefuck/rules/sed_unterminated_s.py +++ b/thefuck/rules/sed_unterminated_s.py @@ -3,11 +3,11 @@ @for_app('sed') -def match(command, settings): +def match(command): return "unterminated `s' command" in command.stderr -def get_new_command(command, settings): +def get_new_command(command): script = shlex.split(command.script) for (i, e) in enumerate(script): diff --git a/thefuck/rules/sl_ls.py b/thefuck/rules/sl_ls.py index 0b3d017ab..e384df7df 100644 --- a/thefuck/rules/sl_ls.py +++ b/thefuck/rules/sl_ls.py @@ -6,9 +6,9 @@ """ -def match(command, settings): +def match(command): return command.script == 'sl' -def get_new_command(command, settings): +def get_new_command(command): return 'ls' diff --git a/thefuck/rules/ssh_known_hosts.py b/thefuck/rules/ssh_known_hosts.py index c6aec1953..e4495cdac 100644 --- a/thefuck/rules/ssh_known_hosts.py +++ b/thefuck/rules/ssh_known_hosts.py @@ -5,7 +5,7 @@ @for_app(*commands) -def match(command, settings): +def match(command): if not command.script: return False if not command.script.startswith(commands): @@ -20,11 +20,11 @@ def match(command, settings): return any(re.findall(pattern, command.stderr) for pattern in patterns) -def get_new_command(command, settings): +def get_new_command(command): return command.script -def side_effect(old_cmd, command, settings): +def side_effect(old_cmd, command): offending_pattern = re.compile( r'(?:Offending (?:key for IP|\S+ key)|Matching host key) in ([^:]+):(\d+)', re.MULTILINE) diff --git a/thefuck/rules/sudo.py b/thefuck/rules/sudo.py index 63e53c9fd..6c5e80529 100644 --- a/thefuck/rules/sudo.py +++ b/thefuck/rules/sudo.py @@ -19,7 +19,7 @@ 'authentication is required'] -def match(command, settings): +def match(command): for pattern in patterns: if pattern.lower() in command.stderr.lower()\ or pattern.lower() in command.stdout.lower(): @@ -27,7 +27,7 @@ def match(command, settings): return False -def get_new_command(command, settings): +def get_new_command(command): if '>' in command.script: return u'sudo sh -c "{}"'.format(command.script.replace('"', '\\"')) else: diff --git a/thefuck/rules/switch_lang.py b/thefuck/rules/switch_lang.py index 2ecd6325f..8952eb056 100644 --- a/thefuck/rules/switch_lang.py +++ b/thefuck/rules/switch_lang.py @@ -28,7 +28,7 @@ def _switch_command(command, layout): return ''.join(_switch(ch, layout) for ch in command.script) -def match(command, settings): +def match(command): if 'not found' not in command.stderr: return False matched_layout = _get_matched_layout(command) @@ -36,6 +36,6 @@ def match(command, settings): _switch_command(command, matched_layout) != thefuck_alias() -def get_new_command(command, settings): +def get_new_command(command): matched_layout = _get_matched_layout(command) return _switch_command(command, matched_layout) diff --git a/thefuck/rules/systemctl.py b/thefuck/rules/systemctl.py index 3edca9fcf..771206d7f 100644 --- a/thefuck/rules/systemctl.py +++ b/thefuck/rules/systemctl.py @@ -7,7 +7,7 @@ @sudo_support @for_app('systemctl') -def match(command, settings): +def match(command): # Catches 'Unknown operation 'service'.' when executing systemctl with # misordered arguments cmd = command.script.split() @@ -16,7 +16,7 @@ def match(command, settings): @sudo_support -def get_new_command(command, settings): +def get_new_command(command): cmd = command.script.split() cmd[-1], cmd[-2] = cmd[-2], cmd[-1] return ' '.join(cmd) diff --git a/thefuck/rules/test.py.py b/thefuck/rules/test.py.py index 4d232db2c..82810a80d 100644 --- a/thefuck/rules/test.py.py +++ b/thefuck/rules/test.py.py @@ -1,8 +1,8 @@ -def match(command, settings): +def match(command): return command.script == 'test.py' and 'not found' in command.stderr -def get_new_command(command, settings): +def get_new_command(command): return 'py.test' diff --git a/thefuck/rules/tmux.py b/thefuck/rules/tmux.py index 09acb578f..0aeaee287 100644 --- a/thefuck/rules/tmux.py +++ b/thefuck/rules/tmux.py @@ -3,12 +3,12 @@ @for_app('tmux') -def match(command, settings): +def match(command): return ('ambiguous command:' in command.stderr and 'could be:' in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): cmd = re.match(r"ambiguous command: (.*), could be: (.*)", command.stderr) diff --git a/thefuck/rules/tsuru_login.py b/thefuck/rules/tsuru_login.py index fc917159f..ce4de2ddb 100644 --- a/thefuck/rules/tsuru_login.py +++ b/thefuck/rules/tsuru_login.py @@ -3,10 +3,10 @@ @for_app('tsuru') -def match(command, settings): +def match(command): return ('not authenticated' in command.stderr and 'session has expired' in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): return shells.and_('tsuru login', command.script) diff --git a/thefuck/rules/tsuru_not_command.py b/thefuck/rules/tsuru_not_command.py index 498a4930f..cae678267 100644 --- a/thefuck/rules/tsuru_not_command.py +++ b/thefuck/rules/tsuru_not_command.py @@ -3,12 +3,12 @@ @for_app('tsuru') -def match(command, settings): +def match(command): return (' is not a tsuru command. See "tsuru help".' in command.stderr and '\nDid you mean?\n\t' in command.stderr) -def get_new_command(command, settings): +def get_new_command(command): broken_cmd = re.findall(r'tsuru: "([^"]*)" is not a tsuru command', command.stderr)[0] return replace_command(command, broken_cmd, diff --git a/thefuck/rules/unknown_command.py b/thefuck/rules/unknown_command.py index 3cd9a9a7f..c0048cc14 100644 --- a/thefuck/rules/unknown_command.py +++ b/thefuck/rules/unknown_command.py @@ -1,12 +1,12 @@ import re from thefuck.utils import replace_command -def match(command, settings): +def match(command): return (re.search(r"([^:]*): Unknown command.*", command.stderr) != None and re.search(r"Did you mean ([^?]*)?", command.stderr) != None) -def get_new_command(command, settings): +def get_new_command(command): broken_cmd = re.findall(r"([^:]*): Unknown command.*", command.stderr)[0] matched = re.findall(r"Did you mean ([^?]*)?", command.stderr) return replace_command(command, broken_cmd, matched) diff --git a/thefuck/rules/vagrant_up.py b/thefuck/rules/vagrant_up.py index 7830f3017..440939728 100644 --- a/thefuck/rules/vagrant_up.py +++ b/thefuck/rules/vagrant_up.py @@ -3,11 +3,11 @@ @for_app('vagrant') -def match(command, settings): +def match(command): return 'run `vagrant up`' in command.stderr.lower() -def get_new_command(command, settings): +def get_new_command(command): cmds = command.script.split(' ') machine = None if len(cmds) >= 3: diff --git a/thefuck/rules/whois.py b/thefuck/rules/whois.py index 79487c38c..141c73325 100644 --- a/thefuck/rules/whois.py +++ b/thefuck/rules/whois.py @@ -2,7 +2,7 @@ from six.moves.urllib.parse import urlparse -def match(command, settings): +def match(command): """ What the `whois` command returns depends on the 'Whois server' it contacted and is not consistent through different servers. But there can be only two @@ -22,7 +22,7 @@ def match(command, settings): return 'whois ' in command.script.strip() -def get_new_command(command, settings): +def get_new_command(command): url = command.script.split()[1] if '/' in command.script: diff --git a/thefuck/specific/git.py b/thefuck/specific/git.py index b84205732..7b423f2c3 100644 --- a/thefuck/specific/git.py +++ b/thefuck/specific/git.py @@ -6,7 +6,7 @@ @decorator -def git_support(fn, command, settings): +def git_support(fn, command): """Resolves git aliases and supports testing for both git and hub.""" # supports GitHub's `hub` command # which is recommended to be used with `alias git=hub` @@ -29,4 +29,4 @@ def git_support(fn, command, settings): command = Command._replace(command, script=new_script) - return fn(command, settings) + return fn(command) diff --git a/thefuck/specific/sudo.py b/thefuck/specific/sudo.py index 8e5d30cd5..63dc22551 100644 --- a/thefuck/specific/sudo.py +++ b/thefuck/specific/sudo.py @@ -4,15 +4,14 @@ @decorator -def sudo_support(fn, command, settings): +def sudo_support(fn, command): """Removes sudo before calling fn and adds it after.""" if not command.script.startswith('sudo '): - return fn(command, settings) + return fn(command) result = fn(Command(command.script[5:], command.stdout, - command.stderr), - settings) + command.stderr)) if result and isinstance(result, six.string_types): return u'sudo {}'.format(result) diff --git a/thefuck/utils.py b/thefuck/utils.py index 66d6b15b3..b533e6e62 100644 --- a/thefuck/utils.py +++ b/thefuck/utils.py @@ -1,6 +1,7 @@ from difflib import get_close_matches from functools import wraps import shelve +from warnings import warn from decorator import decorator from contextlib import closing import tempfile @@ -8,12 +9,12 @@ import os import pickle import re +from inspect import getargspec from pathlib import Path import pkg_resources import six -from .types import Settings - +from .conf import settings DEVNULL = open(os.devnull, 'w') @@ -70,11 +71,11 @@ def match(command, settings): print(settings.apt) """ - def _wrap_settings(fn, command, settings): + def _default_settings(fn, command): for k, w in params.items(): settings.setdefault(k, w) - return fn(command, settings) - return decorator(_wrap_settings) + return fn(command) + return decorator(_default_settings) def get_closest(word, possibilities, n=3, cutoff=0.6, fallback_to_first=True): @@ -156,9 +157,9 @@ def is_app(command, *app_names): def for_app(*app_names): """Specifies that matching script is for on of app names.""" - def _for_app(fn, command, settings): + def _for_app(fn, command): if is_app(command, *app_names): - return fn(command, settings) + return fn(command) else: return False @@ -202,3 +203,24 @@ def _cache(fn, *args, **kwargs): return value return _cache cache.disabled = False + + +def compatibility_call(fn, *args): + """Special call for compatibility with user-defined old-style rules + with `settings` param. + + """ + fn_args_count = len(getargspec(fn).args) + if fn.__name__ in ('match', 'get_new_command') and fn_args_count == 2: + warn("Two arguments `{}` from rule `{}` is deprecated, please " + "remove `settings` argument and use " + "`from thefuck.conf import settings` instead." + .format(fn.__name__, fn.__module__)) + args += (settings,) + if fn.__name__ == 'side_effect' and fn_args_count == 3: + warn("Three arguments `side_effect` from rule `{}` is deprecated, " + "please remove `settings` argument and use `from thefuck.conf " + "import settings` instead." + .format(fn.__name__, fn.__module__)) + args += (settings,) + return fn(*args)