Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

reorg #19

Merged
merged 7 commits into from
Jun 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ python_requires = >=3.9

[options.entry_points]
console_scripts =
silence-lint-error = silence_lint_error.silence_lint_error:main
fix-silenced-error = silence_lint_error.fix_silenced_error:main
silence-lint-error = silence_lint_error.cli.silence_lint_error:main
fix-silenced-error = silence_lint_error.cli.fix_silenced_error:main

[bdist_wheel]
universal = True
Expand Down
File renamed without changes.
75 changes: 75 additions & 0 deletions silence_lint_error/cli/fix_silenced_error.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
from __future__ import annotations

import argparse
import sys
from collections.abc import Sequence
from typing import NamedTuple

from silence_lint_error.fixing import Fixer
from silence_lint_error.fixing import Linter
from silence_lint_error.linters import fixit
from silence_lint_error.linters import ruff


LINTERS: dict[str, type[Linter]] = {
'fixit': fixit.Fixit,
'ruff': ruff.Ruff,
}


class Context(NamedTuple):
rule_name: str
file_names: list[str]
linter: Linter


def _parse_args(argv: Sequence[str] | None) -> Context:
parser = argparse.ArgumentParser(
description=(
'Fix linting errors by removing ignore/fixme comments '
'and running auto-fixes.'
),
)
parser.add_argument(
'linter', choices=LINTERS,
help='The linter to use to fix the errors',
)
parser.add_argument('rule_name')
parser.add_argument('filenames', nargs='*')
args = parser.parse_args(argv)

return Context(
rule_name=args.rule_name,
file_names=args.filenames,
linter=LINTERS[args.linter](),
)


def main(argv: Sequence[str] | None = None) -> int:
rule_name, file_names, linter = _parse_args(argv)
fixer = Fixer(linter)

print('-> removing comments that silence errors', file=sys.stderr)
changed_files = []
for filename in file_names:
try:
fixer.unsilence_violations(rule_name=rule_name, filename=filename)
except fixer.NoChangesMade:
continue
else:
print(filename)
changed_files.append(filename)

if not changed_files:
print('no silenced errors found', file=sys.stderr)
return 0

print(f'-> applying auto-fixes with {linter.name}', file=sys.stderr)
ret, message = fixer.apply_fixes(rule_name=rule_name, filenames=changed_files)
print(message, file=sys.stderr)

return ret


if __name__ == '__main__':
raise SystemExit(main())
87 changes: 87 additions & 0 deletions silence_lint_error/cli/silence_lint_error.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
from __future__ import annotations

import argparse
import sys
from collections.abc import Sequence
from typing import NamedTuple

from silence_lint_error.linters import fixit
from silence_lint_error.linters import flake8
from silence_lint_error.linters import ruff
from silence_lint_error.linters import semgrep
from silence_lint_error.silencing import ErrorRunningTool
from silence_lint_error.silencing import Linter
from silence_lint_error.silencing import Silencer


LINTERS: dict[str, type[Linter]] = {
'fixit': fixit.Fixit,
'fixit-inline': fixit.FixitInline,
'flake8': flake8.Flake8,
'ruff': ruff.Ruff,
'semgrep': semgrep.Semgrep,
}


class Context(NamedTuple):
rule_name: str
file_names: list[str]
linter: Linter


def _parse_args(argv: Sequence[str] | None) -> Context:
parser = argparse.ArgumentParser(
description='Ignore linting errors by adding ignore/fixme comments.',
)
parser.add_argument(
'linter', choices=LINTERS,
help='The linter for which to ignore errors',
)
parser.add_argument('rule_name')
parser.add_argument('filenames', nargs='*')
args = parser.parse_args(argv)

return Context(
rule_name=args.rule_name,
file_names=args.filenames,
linter=LINTERS[args.linter](),
)


def main(argv: Sequence[str] | None = None) -> int:
rule_name, file_names, linter = _parse_args(argv)
silencer = Silencer(linter)

print(f'-> finding errors with {linter.name}', file=sys.stderr)
try:
violations = silencer.find_violations(
rule_name=rule_name, file_names=file_names,
)
except ErrorRunningTool as e:
print(f'ERROR: {e.proc.stderr.strip()}', file=sys.stderr)
return e.proc.returncode
except silencer.NoViolationsFound:
print('no errors found', file=sys.stderr)
return 0
except silencer.MultipleRulesViolated as e:
print(
'ERROR: errors found for multiple rules:', sorted(e.rule_names),
file=sys.stderr,
)
return 1
else:
print(f'found errors in {len(violations)} files', file=sys.stderr)

print('-> adding comments to silence errors', file=sys.stderr)
ret = 0
for filename, file_violations in violations.items():
print(filename)
ret |= silencer.silence_violations(
filename=filename, violations=file_violations,
)

return ret


if __name__ == '__main__':
raise SystemExit(main())
189 changes: 0 additions & 189 deletions silence_lint_error/fix_silenced_error.py

This file was deleted.

Loading