mirror of
				https://github.com/nvbn/thefuck.git
				synced 2025-10-31 07:04:12 +00:00 
			
		
		
		
	#737: Add support of third-party rules
This commit is contained in:
		
							
								
								
									
										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) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user