diff options
| author | seth <[email protected]> | 2022-12-26 03:23:14 -0500 |
|---|---|---|
| committer | seth <[email protected]> | 2022-12-26 03:44:17 -0500 |
| commit | d06defd8d7561d90ecbf7cfb4d5e4778a348e98e (patch) | |
| tree | 0054f5b704bfb0f9a21cc6d2626a62a7c1594d3e | |
| parent | e16a396db9aa0ac707654d8f03c0c8a3b05b7c9f (diff) | |
chore: replace flake8 with pylint, refactor, add pre-commit
| -rw-r--r-- | .flake8 | 2 | ||||
| -rw-r--r-- | .pre-commit-config.yaml | 19 | ||||
| -rw-r--r-- | pyproject.toml | 308 | ||||
| -rw-r--r-- | src/moyai_bot/__init__.py (renamed from src/moyaiBot/__init__.py) | 3 | ||||
| -rw-r--r-- | src/moyai_bot/bot.py (renamed from src/moyaiBot/moyaiBot.py) | 7 | ||||
| -rw-r--r-- | src/moyai_bot/lib.py (renamed from src/moyaiBot/lib.py) | 3 |
6 files changed, 332 insertions, 10 deletions
diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 1d36346..0000000 --- a/.flake8 +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -max-line-length = 88
\ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..ca42340 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,19 @@ +- repo: https://github.com/pycqa/isort + rev: 5.11.2 + hooks: + - id: isort + name: isort (python) + +- repo: local + hooks: + - id: pylint + name: pylint + entry: pylint + language: system + types: [python] + +- repo: https://github.com/pre-commit/mirrors-yapf + rev: "v0.32.0" # Use the sha / tag you want to point at + hooks: + - id: yapf + additional_dependencies: ["toml"] diff --git a/pyproject.toml b/pyproject.toml index 41eca1a..35912ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["flit_core>=3.2"] build-backend = "flit_core.buildapi" [project] -name = "moyaiBot" +name = "moyai_bot" version = "0.0.1" description = "moyai" authors = [ @@ -17,6 +17,8 @@ dependencies = [ [project.optional-dependencies] dev = [ + "pre-commit", + "pylint", "toml", "yapf", ] @@ -26,7 +28,307 @@ dev = [ "Bug Tracker" = "https://github.com/getchoo/moyaiBot/issues" [project.scripts] -moyaibot = "moyaiBot:main" +moyaibot = "moyai_bot:main" [tool.yapf] -use_tabs = true
\ No newline at end of file +use_tabs = true + +[tool.pylint.main] +# Specify a score threshold under which the program will exit with error. +fail-under = 10 + +# Files or directories to be skipped. They should be base names, not paths. +ignore = ["CVS"] + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs = 1 + +# Control the amount of potential inferred values when inferring a single object. +# This can help the performance when dealing with large functions or complex, +# nested conditions. +limit-inference-results = 100 + +# Pickle collected data for later comparisons. +persistent = true + +# Minimum Python version to use for version dependent checks. Will default to the +# version used to run pylint. +py-version = "3.11" + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode = true + +[tool.pylint.basic] +# Naming style matching correct argument names. +argument-naming-style = "snake_case" + +# Naming style matching correct attribute names. +attr-naming-style = "snake_case" + +# Bad variable names which should always be refused, separated by a comma. +bad-names = ["foo", "bar", "baz", "toto", "tutu", "tata"] + +# Naming style matching correct class attribute names. +class-attribute-naming-style = "any" + +# Naming style matching correct class constant names. +class-const-naming-style = "UPPER_CASE" + +# Naming style matching correct class names. +class-naming-style = "PascalCase" + +# Naming style matching correct constant names. +const-naming-style = "UPPER_CASE" + +# Minimum line length for functions/classes that require docstrings, shorter ones +# are exempt. +docstring-min-length = -1 + +# Naming style matching correct function names. +function-naming-style = "snake_case" + +# Good variable names which should always be accepted, separated by a comma. +good-names = ["i", "j", "k", "ex", "Run", "_"] + +# Naming style matching correct inline iteration names. +inlinevar-naming-style = "any" + +# Naming style matching correct method names. +method-naming-style = "snake_case" + +# Naming style matching correct module names. +module-naming-style = "snake_case" + +# Regular expression which should only match function or class names that do not +# require a docstring. +no-docstring-rgx = "^_" + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. These +# decorators are taken in consideration only for invalid-name. +property-classes = ["abc.abstractproperty"] + +# Naming style matching correct variable names. +variable-naming-style = "snake_case" + +[tool.pylint.classes] +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods = ["__init__", "__new__", "setUp", "__post_init__"] + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected = ["_asdict", "_fields", "_replace", "_source", "_make"] + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg = ["cls"] + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg = ["cls"] + +[tool.pylint.design] +# Maximum number of arguments for function / method. +max-args = 5 + +# Maximum number of attributes for a class (see R0902). +max-attributes = 7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr = 5 + +# Maximum number of branch for function / method body. +max-branches = 12 + +# Maximum number of locals for function / method body. +max-locals = 15 + +# Maximum number of parents for a class (see R0901). +max-parents = 7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods = 20 + +# Maximum number of return / yield for function / method body. +max-returns = 6 + +# Maximum number of statements in function / method body. +max-statements = 50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods = 2 + +[tool.pylint.exceptions] +# Exceptions that will emit a warning when caught. +overgeneral-exceptions = ["BaseException", "Exception"] + +[tool.pylint.format] +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format = "LF" + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines = "^\\s*(# )?<?https?://\\S+>?$" + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren = 4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string = " " + +# Maximum number of characters on a single line. +max-line-length = 100 + +# Maximum number of lines in a module. +max-module-lines = 1000 + +[tool.pylint.imports] +# Force import order to recognize a module as part of a third party library. +known-third-party = ["enchant"] + +[tool.pylint.logging] +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style = "new" + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules = ["logging"] + +[tool.pylint."messages control"] +# Only show warnings with the listed confidence levels. Leave empty to show all. +# Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence = ["HIGH", "CONTROL_FLOW", "INFERENCE", "INFERENCE_FAILURE", "UNDEFINED"] + +# Disable the message, report, category or checker with the given id(s). You can +# either give multiple identifiers separated by comma (,) or put this option +# multiple times (only on the command line, not in the configuration file where +# it should appear only once). You can also use "--disable=all" to disable +# everything first and then re-enable specific checks. For example, if you want +# to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable = ["raw-checker-failed", "bad-inline-option", "locally-disabled", "file-ignored", "suppressed-message", "useless-suppression", "deprecated-pragma", "use-symbolic-message-instead", "missing-function-docstring", "missing-module-docstring"] + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where it +# should appear only once). See also the "--disable" option for examples. +enable = ["c-extension-no-member"] + +[tool.pylint.method_args] +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods = ["requests.api.delete", "requests.api.get", "requests.api.head", "requests.api.options", "requests.api.patch", "requests.api.post", "requests.api.put", "requests.api.request"] + +[tool.pylint.miscellaneous] +# List of note tags to take in consideration, separated by a comma. +notes = ["FIXME", "XXX", "TODO"] + +[tool.pylint.refactoring] +# Maximum number of nested blocks for function / method body +max-nested-blocks = 5 + +# Complete name of functions that never returns. When checking for inconsistent- +# return-statements if a never returning function is called then it will be +# considered as an explicit return statement and no message will be printed. +never-returning-functions = ["sys.exit", "argparse.parse_error"] + +[tool.pylint.reports] +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each category, +# as well as 'statement' which is the total number of statements analyzed. This +# score is used by the global evaluation report (RP0004). +evaluation = "max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10))" + +# Activate the evaluation score. +score = true + +[tool.pylint.similarities] +# Comments are removed from the similarity computation +ignore-comments = true + +# Docstrings are removed from the similarity computation +ignore-docstrings = true + +# Imports are removed from the similarity computation +ignore-imports = true + +# Signatures are removed from the similarity computation +ignore-signatures = true + +# Minimum lines number of a similarity. +min-similarity-lines = 4 + +[tool.pylint.spelling] +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions = 4 + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives = "fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy:" + +[tool.pylint.typecheck] +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators = ["contextlib.contextmanager"] + +# Tells whether missing members accessed in mixin class should be ignored. A +# class is considered mixin if its name matches the mixin-class-rgx option. +# Tells whether to warn about missing members when the owner of the attribute is +# inferred to be None. +ignore-none = true + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference can +# return multiple potential results while evaluating a Python object, but some +# branches might not be evaluated, which results in partial inference. In that +# case, it might be useful to still emit no-member and other checks for the rest +# of the inferred objects. +ignore-on-opaque-inference = true + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins = ["no-member", "not-async-context-manager", "not-context-manager", "attribute-defined-outside-init"] + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes = ["optparse.Values", "thread._local", "_thread._local", "argparse.Namespace"] + +# Show a hint with possible names when a member name was not found. The aspect of +# finding the hint is based on edit distance. +missing-member-hint = true + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance = 1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices = 1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx = ".*[Mm]ixin" + +[tool.pylint.variables] +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables = true + +# List of strings which can identify a callback function by name. A callback name +# must start or end with one of those strings. +callbacks = ["cb_", "_cb"] + +# A regular expression matching the name of dummy variables (i.e. expected to not +# be used). +dummy-variables-rgx = "_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_" + +# Argument names that match this expression will be ignored. +ignored-argument-names = "_.*|^ignored_|^unused_" + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules = ["six.moves", "past.builtins", "future.builtins", "builtins", "io"] diff --git a/src/moyaiBot/__init__.py b/src/moyai_bot/__init__.py index dad1ed9..0820f2a 100644 --- a/src/moyaiBot/__init__.py +++ b/src/moyai_bot/__init__.py @@ -1,5 +1,6 @@ import os -from .moyaiBot import moyai + +from .bot import moyai TOKEN = os.getenv("TOKEN") diff --git a/src/moyaiBot/moyaiBot.py b/src/moyai_bot/bot.py index f09700a..8a152a8 100644 --- a/src/moyaiBot/moyaiBot.py +++ b/src/moyai_bot/bot.py @@ -1,9 +1,10 @@ import discord from discord.ext import commands -from moyaiBot.lib import get_random_response + +from moyai_bot.lib import get_random_response intents = discord.Intents.default() -intents.message_content = True +intents.message_content = True # pylint: disable=assigning-non-slot moyai = commands.Bot(command_prefix="m!", description="moyai", intents=intents) @@ -37,6 +38,6 @@ async def ask(ctx): @moyai.command() async def moyaispam(ctx): msg = str() - for i in range(30): + for _ in range(30): msg += str(discord.utils.get(moyai.emojis, name="moyai")) await ctx.send(msg) diff --git a/src/moyaiBot/lib.py b/src/moyai_bot/lib.py index 899a906..c7ec164 100644 --- a/src/moyaiBot/lib.py +++ b/src/moyai_bot/lib.py @@ -1,6 +1,7 @@ -import discord import random +import discord + def get_random_response(moyai): responses = [ |
