All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com>
return [TargetVersion[val.upper()] for val in v]
return [TargetVersion[val.upper()] for val in v]
+def validate_regex(
+ ctx: click.Context,
+ param: click.Parameter,
+ value: Optional[str],
+) -> Optional[Pattern]:
+ try:
+ return re_compile_maybe_verbose(value) if value is not None else None
+ except re.error:
+ raise click.BadParameter("Not a valid regular expression")
+
+
@click.command(context_settings=dict(help_option_names=["-h", "--help"]))
@click.option("-c", "--code", type=str, help="Format the code passed in as a string.")
@click.option(
@click.command(context_settings=dict(help_option_names=["-h", "--help"]))
@click.option("-c", "--code", type=str, help="Format the code passed in as a string.")
@click.option(
"--include",
type=str,
default=DEFAULT_INCLUDES,
"--include",
type=str,
default=DEFAULT_INCLUDES,
+ callback=validate_regex,
help=(
"A regular expression that matches files and directories that should be"
" included on recursive searches. An empty value means all files are included"
help=(
"A regular expression that matches files and directories that should be"
" included on recursive searches. An empty value means all files are included"
"--exclude",
type=str,
default=DEFAULT_EXCLUDES,
"--exclude",
type=str,
default=DEFAULT_EXCLUDES,
+ callback=validate_regex,
help=(
"A regular expression that matches files and directories that should be"
" excluded on recursive searches. An empty value means no paths are excluded."
help=(
"A regular expression that matches files and directories that should be"
" excluded on recursive searches. An empty value means no paths are excluded."
@click.option(
"--extend-exclude",
type=str,
@click.option(
"--extend-exclude",
type=str,
+ callback=validate_regex,
help=(
"Like --exclude, but adds additional files and directories on top of the"
" excluded ones. (Useful if you simply want to add to the default)"
help=(
"Like --exclude, but adds additional files and directories on top of the"
" excluded ones. (Useful if you simply want to add to the default)"
@click.option(
"--force-exclude",
type=str,
@click.option(
"--force-exclude",
type=str,
+ callback=validate_regex,
help=(
"Like --exclude, but files and directories matching this regex will be "
"excluded even when they are passed explicitly as arguments."
help=(
"Like --exclude, but files and directories matching this regex will be "
"excluded even when they are passed explicitly as arguments."
experimental_string_processing: bool,
quiet: bool,
verbose: bool,
experimental_string_processing: bool,
quiet: bool,
verbose: bool,
- include: str,
- exclude: str,
- extend_exclude: Optional[str],
- force_exclude: Optional[str],
+ include: Pattern,
+ exclude: Pattern,
+ extend_exclude: Optional[Pattern],
+ force_exclude: Optional[Pattern],
stdin_filename: Optional[str],
src: Tuple[str, ...],
config: Optional[str],
stdin_filename: Optional[str],
src: Tuple[str, ...],
config: Optional[str],
ctx.exit(report.return_code)
ctx.exit(report.return_code)
-def test_regex(
- ctx: click.Context,
- regex_name: str,
- regex: Optional[str],
-) -> Optional[Pattern]:
- try:
- return re_compile_maybe_verbose(regex) if regex is not None else None
- except re.error:
- err(f"Invalid regular expression for {regex_name} given: {regex!r}")
- ctx.exit(2)
-
-
def get_sources(
*,
ctx: click.Context,
src: Tuple[str, ...],
quiet: bool,
verbose: bool,
def get_sources(
*,
ctx: click.Context,
src: Tuple[str, ...],
quiet: bool,
verbose: bool,
- include: str,
- exclude: str,
- extend_exclude: Optional[str],
- force_exclude: Optional[str],
+ include: Pattern[str],
+ exclude: Pattern[str],
+ extend_exclude: Optional[Pattern[str]],
+ force_exclude: Optional[Pattern[str]],
report: "Report",
stdin_filename: Optional[str],
) -> Set[Path]:
"""Compute the set of files to be formatted."""
report: "Report",
stdin_filename: Optional[str],
) -> Set[Path]:
"""Compute the set of files to be formatted."""
- include_regex = test_regex(ctx, "include", include)
- exclude_regex = test_regex(ctx, "exclude", exclude)
- assert exclude_regex is not None
- extend_exclude_regex = test_regex(ctx, "extend_exclude", extend_exclude)
- force_exclude_regex = test_regex(ctx, "force_exclude", force_exclude)
-
root = find_project_root(src)
sources: Set[Path] = set()
path_empty(src, "No Path provided. Nothing to do 😴", quiet, verbose, ctx)
root = find_project_root(src)
sources: Set[Path] = set()
path_empty(src, "No Path provided. Nothing to do 😴", quiet, verbose, ctx)
normalized_path = "/" + normalized_path
# Hard-exclude any files that matches the `--force-exclude` regex.
normalized_path = "/" + normalized_path
# Hard-exclude any files that matches the `--force-exclude` regex.
- if force_exclude_regex:
- force_exclude_match = force_exclude_regex.search(normalized_path)
+ if force_exclude:
+ force_exclude_match = force_exclude.search(normalized_path)
else:
force_exclude_match = None
if force_exclude_match and force_exclude_match.group(0):
else:
force_exclude_match = None
if force_exclude_match and force_exclude_match.group(0):
gen_python_files(
p.iterdir(),
root,
gen_python_files(
p.iterdir(),
root,
- include_regex,
- exclude_regex,
- extend_exclude_regex,
- force_exclude_regex,
+ include,
+ exclude,
+ extend_exclude,
+ force_exclude,
src=(src,),
quiet=True,
verbose=False,
src=(src,),
quiet=True,
verbose=False,
- include=include,
- exclude=exclude,
+ include=re.compile(include),
+ exclude=re.compile(exclude),
extend_exclude=None,
force_exclude=None,
report=report,
extend_exclude=None,
force_exclude=None,
report=report,
src=(src,),
quiet=True,
verbose=False,
src=(src,),
quiet=True,
verbose=False,
- include=include,
- exclude=exclude,
+ include=re.compile(include),
+ exclude=re.compile(exclude),
extend_exclude=None,
force_exclude=None,
report=report,
extend_exclude=None,
force_exclude=None,
report=report,
src=(src,),
quiet=True,
verbose=False,
src=(src,),
quiet=True,
verbose=False,
- include=include,
- exclude=exclude,
+ include=re.compile(include),
+ exclude=re.compile(exclude),
extend_exclude=None,
force_exclude=None,
report=report,
extend_exclude=None,
force_exclude=None,
report=report,
src=(src,),
quiet=True,
verbose=False,
src=(src,),
quiet=True,
verbose=False,
- include=include,
- exclude=exclude,
+ include=re.compile(include),
+ exclude=re.compile(exclude),
extend_exclude=None,
force_exclude=None,
report=report,
extend_exclude=None,
force_exclude=None,
report=report,
src=(src,),
quiet=True,
verbose=False,
src=(src,),
quiet=True,
verbose=False,
- include=include,
- exclude="",
- extend_exclude=extend_exclude,
+ include=re.compile(include),
+ exclude=re.compile(""),
+ extend_exclude=re.compile(extend_exclude),
force_exclude=None,
report=report,
stdin_filename=stdin_filename,
force_exclude=None,
report=report,
stdin_filename=stdin_filename,
src=(src,),
quiet=True,
verbose=False,
src=(src,),
quiet=True,
verbose=False,
- include=include,
- exclude="",
+ include=re.compile(include),
+ exclude=re.compile(""),
- force_exclude=force_exclude,
+ force_exclude=re.compile(force_exclude),
report=report,
stdin_filename=stdin_filename,
)
report=report,
stdin_filename=stdin_filename,
)