mirror of
https://github.com/nvbn/thefuck.git
synced 2025-01-31 02:01:13 +00:00
#737: Add support of third-party rules
This commit is contained in:
parent
d582159670
commit
4847078f37
19
README.md
19
README.md
@ -405,6 +405,25 @@ export THEFUCK_PRIORITY='no_command=9999:apt_get=100'
|
||||
export THEFUCK_HISTORY_LIMIT='2000'
|
||||
```
|
||||
|
||||
## Third-party packages with rules
|
||||
|
||||
If you want to make very specific rules or rules, that you don't want to make public,
|
||||
but share with other people.
|
||||
You can create a special package with name `thefuck_contrib_*` with following structure:
|
||||
|
||||
```
|
||||
thefuck_contrib_foo
|
||||
thefuck_contrib_foo
|
||||
rules
|
||||
__init__.py
|
||||
*third-party rules*
|
||||
__init__.py
|
||||
*third-party-utils*
|
||||
setup.py
|
||||
```
|
||||
|
||||
And thefuck will find all rules from `rules` module.
|
||||
|
||||
## Experimental instant mode
|
||||
|
||||
By default The Fuck reruns a previous command and that takes time,
|
||||
|
@ -1,3 +1,4 @@
|
||||
import sys
|
||||
from .conf import settings
|
||||
from .types import Rule
|
||||
from .system import Path
|
||||
@ -18,17 +19,33 @@ def get_loaded_rules(rules_paths):
|
||||
yield rule
|
||||
|
||||
|
||||
def get_rules_import_paths():
|
||||
"""Yields all rules import paths.
|
||||
|
||||
:rtype: Iterable[Path]
|
||||
|
||||
"""
|
||||
# Bundled rules:
|
||||
yield Path(__file__).parent.joinpath('rules')
|
||||
# Rules defined by user:
|
||||
yield settings.user_dir.joinpath('rules')
|
||||
# Packages with third-party rules:
|
||||
for path in sys.path:
|
||||
for contrib_module in Path(path).glob('thefuck_contrib_*'):
|
||||
contrib_rules = contrib_module.joinpath('rules')
|
||||
if contrib_rules.is_dir():
|
||||
yield contrib_rules
|
||||
|
||||
|
||||
def get_rules():
|
||||
"""Returns all enabled rules.
|
||||
|
||||
:rtype: [Rule]
|
||||
|
||||
"""
|
||||
bundled = Path(__file__).parent \
|
||||
.joinpath('rules') \
|
||||
.glob('*.py')
|
||||
user = settings.user_dir.joinpath('rules').glob('*.py')
|
||||
return sorted(get_loaded_rules(sorted(bundled) + sorted(user)),
|
||||
paths = [rule_path for path in get_rules_import_paths()
|
||||
for rule_path in sorted(path.glob('*.py'))]
|
||||
return sorted(get_loaded_rules(paths),
|
||||
key=lambda rule: rule.priority)
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user