mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-25 14:28:38 +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'
|
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
|
## Experimental instant mode
|
||||||
|
|
||||||
By default The Fuck reruns a previous command and that takes time,
|
By default The Fuck reruns a previous command and that takes time,
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import sys
|
||||||
from .conf import settings
|
from .conf import settings
|
||||||
from .types import Rule
|
from .types import Rule
|
||||||
from .system import Path
|
from .system import Path
|
||||||
@ -18,17 +19,33 @@ def get_loaded_rules(rules_paths):
|
|||||||
yield rule
|
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():
|
def get_rules():
|
||||||
"""Returns all enabled rules.
|
"""Returns all enabled rules.
|
||||||
|
|
||||||
:rtype: [Rule]
|
:rtype: [Rule]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
bundled = Path(__file__).parent \
|
paths = [rule_path for path in get_rules_import_paths()
|
||||||
.joinpath('rules') \
|
for rule_path in sorted(path.glob('*.py'))]
|
||||||
.glob('*.py')
|
return sorted(get_loaded_rules(paths),
|
||||||
user = settings.user_dir.joinpath('rules').glob('*.py')
|
|
||||||
return sorted(get_loaded_rules(sorted(bundled) + sorted(user)),
|
|
||||||
key=lambda rule: rule.priority)
|
key=lambda rule: rule.priority)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user