1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-01-31 10:11:14 +00:00

Add yarn_help rule

Yarn likes to keep its documentation online, rather than in `yarn help`
output. For example, `yarn help clean` doesn't tell you anything about
the `clean` subcommand. Instead, it points you towards
https://yarnpkg.com/en/docs/cli/clean

This rule detects when that happens, and suggests opening the URL. One
caveat is the currently only OSX is supported, as Linux uses `xdg-open`
instead of `open`.
This commit is contained in:
Joseph Frazier 2017-03-10 12:54:15 -05:00
parent 7d3ddfc8d9
commit 35ea4dce71
3 changed files with 69 additions and 0 deletions

View File

@ -250,6 +250,7 @@ using the matched rule and runs it. Rules enabled by default are as follows:
* `workon_doesnt_exists` – fixes `virtualenvwrapper` env name os suggests to create new.
* `yarn_alias` – fixes aliased `yarn` commands like `yarn ls`;
* `yarn_command_not_found` – fixes misspelled `yarn` commands;
* `yarn_help` – makes it easier to open `yarn` documentation;
Enabled by default only on specific platforms:

View File

@ -0,0 +1,55 @@
import pytest
from thefuck.rules.yarn_help import match, get_new_command
from tests.utils import Command
stdout_clean = '''
Usage: yarn [command] [flags]
Options:
-h, --help output usage information
-V, --version output the version number
--verbose output verbose messages on internal operations
--offline trigger an error if any required dependencies are not available in local cache
--prefer-offline use network only if dependencies are not available in local cache
--strict-semver
--json
--ignore-scripts don't run lifecycle scripts
--har save HAR output of network traffic
--ignore-platform ignore platform checks
--ignore-engines ignore engines check
--ignore-optional ignore optional dependencies
--force ignore all caches
--no-bin-links don't generate bin links when setting up packages
--flat only allow one version of a package
--prod, --production [prod]
--no-lockfile don't read or generate a lockfile
--pure-lockfile don't generate a lockfile
--frozen-lockfile don't generate a lockfile and fail if an update is needed
--link-duplicates create hardlinks to the repeated modules in node_modules
--global-folder <path>
--modules-folder <path> rather than installing modules into the node_modules folder relative to the cwd, output them here
--cache-folder <path> specify a custom folder to store the yarn cache
--mutex <type>[:specifier] use a mutex to ensure only one yarn instance is executing
--no-emoji disable emoji in output
--proxy <host>
--https-proxy <host>
--no-progress disable progress bar
--network-concurrency <number> maximum number of concurrent network requests
Visit https://yarnpkg.com/en/docs/cli/clean for documentation about this command.
''' # noqa
@pytest.mark.parametrize('command', [
Command(script='yarn help clean', stdout=stdout_clean)])
def test_match(command):
assert match(command)
@pytest.mark.parametrize('command, new_command', [
(Command('yarn help clean', stdout=stdout_clean), 'open https://yarnpkg.com/en/docs/cli/clean')])
def test_get_new_command(command, new_command):
assert get_new_command(command) == new_command

View File

@ -0,0 +1,13 @@
import re
from thefuck.utils import for_app
@for_app('yarn', at_least=2)
def match(command):
return command.script_parts[1] == 'help' and ('for documentation about this command.' in command.stdout)
def get_new_command(command):
fix = re.findall(r'Visit ([^ ]*) for documentation about this command.', command.stdout)[0]
return 'open ' + fix