Compare commits
46 commits
v2024.12.2
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 9e24f7cb85 | |||
| 699f808951 | |||
| 327852af40 | |||
| 267a100b09 | |||
| 906b0510bb | |||
| a8f3261ab8 | |||
| ac7c7010df | |||
| 754143b395 | |||
| 99ed8efc43 | |||
| 403e056802 | |||
| ff1f2c8760 | |||
| ce224275e9 | |||
| 4c68e226bf | |||
| 9962068019 | |||
| a78f53740a | |||
| 2b5b7f7fe9 | |||
| 410666e0b0 | |||
| 1a31aa838e | |||
| ad74f48679 | |||
| 6ec4f958ff | |||
| 4341df0114 | |||
| 5ba4f6bb81 | |||
| 35b3ac22ec | |||
| 03c2644ac4 | |||
| 968d2b8443 | |||
| 31985cc551 | |||
| 7827aae0ae | |||
| 3913a49537 | |||
| b5031417dc | |||
| 5448eced5a | |||
| 0effc3da49 | |||
| 06e9250888 | |||
| 1a1989e565 | |||
| 54d7d8c2a7 | |||
| 95603d2985 | |||
| 63a2c0dfd9 | |||
| e9bc97fb40 | |||
| 1cf014fb16 | |||
| 6ec0d4e1ff | |||
| 65666648ac | |||
| f5dd5d3444 | |||
| 1377b36d28 | |||
| 418c6c0bea | |||
| fb354cba60 | |||
| fe5389d698 | |||
| e6256f296f |
31
README.md
|
|
@ -2,23 +2,26 @@
|
|||
|
||||
## Summary
|
||||
|
||||
Eris maintains an up-to-date set of reports for every file in a codebase.
|
||||
Eris maintains an up to date set of reports for every file in a codebase.
|
||||
|
||||
## Installation
|
||||
|
||||
#### Debian / Ubuntu / Fedora / Arch / Alpine
|
||||
|
||||
Install eris with pipx, then install all the tools eris uses:
|
||||
Eris can be installed by pipx or [uv](https://docs.astral.sh/uv/getting-started/installation/).
|
||||
|
||||
To install with pipx:
|
||||
|
||||
pipx install git+https://gitlab.com/ahamilton/eris@v2025.07.11
|
||||
|
||||
or to install with uv:
|
||||
|
||||
uv tool install git+https://gitlab.com/ahamilton/eris@v2025.07.11
|
||||
|
||||
Then use eris to install all the tools it uses:
|
||||
|
||||
pipx install --system-site-packages git+https://gitlab.com/ahamilton/eris@v2024.12.20#subdirectory=eris
|
||||
eris --install-all-tools
|
||||
|
||||
Or install from source: (includes tools)
|
||||
|
||||
git clone https://gitlab.com/ahamilton/eris
|
||||
cd eris
|
||||
./install
|
||||
|
||||
Then to run:
|
||||
|
||||
eris
|
||||
|
|
@ -26,21 +29,23 @@ Then to run:
|
|||
|
||||
## Tools
|
||||
|
||||
File types(100) | Tools(57)
|
||||
File types(103) | Tools(63)
|
||||
----------:| -----
|
||||
.* | [contents](http://pygments.org/) • [metadata](https://github.com/ahamilton/eris) • [git_diff](https://git-scm.com/docs/git-diff) • [git_blame](https://git-scm.com/docs/git-blame) • [git_log](https://git-scm.com/docs/git-log)
|
||||
.py | [python_syntax](https://en.wikipedia.org/wiki/Python_syntax_and_semantics) • [python_unittests](https://docs.python.org/3/library/unittest.html) • [pytest](https://docs.pytest.org/en/latest/) • [pydoc](https://docs.python.org/3/library/pydoc.html) • [mypy](http://mypy-lang.org/) • [python_coverage](https://coverage.readthedocs.io/) • [pycodestyle](http://pycodestyle.pycqa.org/en/latest/) • [pydocstyle](http://www.pydocstyle.org/en/2.1.1/usage.html) • [pyflakes](https://pypi.org/project/pyflakes/) • [pylint](https://www.pylint.org/) • [python_gut](https://github.com/ahamilton/eris) • [python_mccabe](https://pypi.org/project/mccabe/) • [bandit](https://pypi.org/project/bandit/)
|
||||
.py | [python_syntax](https://en.wikipedia.org/wiki/Python_syntax_and_semantics) • [python_unittests](https://docs.python.org/3/library/unittest.html) • [pytest](https://docs.pytest.org/en/latest/) • [pydoc](https://docs.python.org/3/library/pydoc.html) • [mypy](http://mypy-lang.org/) • [python_coverage](https://coverage.readthedocs.io/) • [pycodestyle](http://pycodestyle.pycqa.org/en/latest/) • [pyflakes](https://pypi.org/project/pyflakes/) • [pylint](https://www.pylint.org/) • [python_gut](https://github.com/ahamilton/eris) • [python_mccabe](https://pypi.org/project/mccabe/) • [bandit](https://pypi.org/project/bandit/) • [black](https://github.com/psf/black) • [isort](https://pycqa.github.io/isort/)
|
||||
.pl .pm .t | [perl_syntax](https://en.wikipedia.org/wiki/Perl) • [perldoc](http://perldoc.perl.org/)
|
||||
.p6 .pm6 | [perl6_syntax](https://rakudo.org/)
|
||||
.pod .pod6 | [perldoc](http://perldoc.perl.org/)
|
||||
.c .h | [c_syntax_gcc](https://gcc.gnu.org/) • [cppcheck](http://sourceforge.net/p/cppcheck/wiki/Home/)
|
||||
.cc .cpp .hpp | [cpp_syntax_gcc](https://gcc.gnu.org/) • [cppcheck](http://sourceforge.net/p/cppcheck/wiki/Home/)
|
||||
.rb | [ruby_syntax](http://www.ruby-lang.org/)
|
||||
.rb | [ruby_syntax](http://www.ruby-lang.org/) • [rubocop](https://rubocop.org/)
|
||||
.rs | [rustfmt](https://github.com/rust-lang/rustfmt) • [clippy](https://github.com/rust-lang/rust-clippy)
|
||||
.lua | [lua_syntax](http://www.lua.org) • [lua_check](https://github.com/mpeterv/luacheck)
|
||||
.js | [js_syntax](http://nodejs.org/)
|
||||
.js .ts | [js_syntax](http://nodejs.org/) • [typescript_check](https://www.typescriptlang.org/)
|
||||
.php | [php8_syntax](https://en.wikipedia.org/wiki/PHP)
|
||||
.go | [go_vet](https://github.com/golang/go) • [godoc](https://github.com/golang/go)
|
||||
.bash .sh .dash .ksh | [shellcheck](https://www.shellcheck.net/)
|
||||
.wat | [wat_syntax_check](https://github.com/WebAssembly/wabt)
|
||||
.wasm | [wasm_validate](https://github.com/WebAssembly/wabt) • [wasm_objdump](https://github.com/WebAssembly/wabt)
|
||||
.pdf | [pdf2txt](https://github.com/pdfminer/pdfminer.six)
|
||||
.html .htm | [html_syntax](https://www.html-tidy.org/) • [html2text](http://www.mbayer.de/html2text/) • [elinks](http://elinks.cz/)
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
../LICENSE
|
||||
1
eris/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
|||
__version__ = "v2025.07.11"
|
||||
|
|
@ -43,7 +43,7 @@ import termstr
|
|||
import eris
|
||||
import eris.worker as worker
|
||||
import eris.paged_list as paged_list
|
||||
import sorted_collection
|
||||
import eris.sorted_collection as sorted_collection
|
||||
|
||||
|
||||
USAGE = """
|
||||
|
|
@ -88,6 +88,7 @@ KEYS_DOC = """Keys:
|
|||
R - Refresh all reports of the current tool.
|
||||
f - Resize the focused pane to the full screen. (toggle)
|
||||
o - Open the current file with xdg-open.
|
||||
p - Patch the current file. (When viewing a patch from a tool)
|
||||
"""
|
||||
|
||||
|
||||
|
|
@ -786,6 +787,15 @@ class Screen:
|
|||
in_green(f" at line {line_num}…")])
|
||||
subprocess.Popen(f"{self.editor_command} +{line_num} {path}", shell=True,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
def patch_file(self):
|
||||
result = self._summary.get_selection()
|
||||
if hasattr(result.tool, "patch_command") and result.tool.patch_command is not None:
|
||||
path = result.path
|
||||
path_colored = lscolors.path_colored(path)
|
||||
self._log.log_message([in_green("Patching file: "), path_colored])
|
||||
subprocess.run(f"{result.tool.patch_command} {path} | patch -p0", shell=True,
|
||||
capture_output=True)
|
||||
subprocess.run(["touch", path])
|
||||
|
||||
def toggle_status_style(self):
|
||||
self._summary.toggle_status_style(self._log)
|
||||
|
|
@ -915,7 +925,7 @@ class Screen:
|
|||
tools.STATUS_TO_TERMSTR[widget.status] + divider + "line " + str(y+1))
|
||||
|
||||
_STATUS_BAR = highlight_chars(" *help *quit *t*a*b:focus *turn *log *edit *next *sort"
|
||||
" *refresh *fullscreen *open", Log._GREEN_STYLE)
|
||||
" *refresh *fullscreen *open *patch", Log._GREEN_STYLE)
|
||||
|
||||
@functools.cache
|
||||
def _get_partial_bar_chars(self, bar_transparency):
|
||||
|
|
@ -963,9 +973,9 @@ class Screen:
|
|||
terminal.RIGHT: cursor_right, terminal.PAGE_DOWN: cursor_page_down,
|
||||
terminal.PAGE_UP: cursor_page_up, "s": toggle_order, terminal.HOME: cursor_home,
|
||||
terminal.END: cursor_end, "n": move_to_next_issue, "N": move_to_next_issue_of_tool,
|
||||
"e": edit_file, "q": quit_, terminal.ESC: quit_, terminal.CTRL_C: quit_,
|
||||
"r": refresh, "R": refresh_tool, "\t": toggle_focus, "f": toggle_fullscreen,
|
||||
"o": xdg_open}
|
||||
"e": edit_file, "p": patch_file, "q": quit_, terminal.ESC: quit_,
|
||||
terminal.CTRL_C: quit_, "r": refresh, "R": refresh_tool, "\t": toggle_focus,
|
||||
"f": toggle_fullscreen, "o": xdg_open}
|
||||
|
||||
|
||||
def setup_inotify(root_path, loop, on_filesystem_event, exclude_filter):
|
||||
|
|
@ -1109,23 +1119,36 @@ def manage_cache(root_path):
|
|||
gitignore_file.write("*")
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def print_to_pager(pager_command=["less", "-RFEX"]):
|
||||
try:
|
||||
with subprocess.Popen(pager_command, stdin=subprocess.PIPE, text=True) as pager_process:
|
||||
with contextlib.redirect_stdout(pager_process.stdin):
|
||||
yield
|
||||
except FileNotFoundError:
|
||||
yield
|
||||
|
||||
|
||||
def print_tool_info():
|
||||
extensions_for_tool = {}
|
||||
for extensions, tools_ in tools.TOOLS_FOR_EXTENSIONS:
|
||||
for extension in extensions:
|
||||
for tool in tools_:
|
||||
extensions_for_tool.setdefault(tool, {extension}).add(extension)
|
||||
for tool in sorted(tools.tools_all(), key=lambda t: t.__name__):
|
||||
print(termstr.TermStr(tool.__name__, is_bold=True) if tools.is_tool_available(tool)
|
||||
else termstr.TermStr(tool.__name__, fg_color=termstr.Color.red) + " (not available)")
|
||||
if hasattr(tool, "command"):
|
||||
print(f"command: {tool.command} foo.{extensions[0]}")
|
||||
else:
|
||||
print("function:", "eris.tools." + tool.__name__)
|
||||
print("url:", tool.url)
|
||||
extensions = list(extensions_for_tool.get(tool, {"*"}))
|
||||
print("extensions:", ", ".join(extensions))
|
||||
print()
|
||||
with print_to_pager():
|
||||
for tool in sorted(tools.tools_all(), key=lambda t: t.__name__):
|
||||
print(termstr.TermStr(tool.__name__, is_bold=True) if tools.is_tool_available(tool)
|
||||
else termstr.TermStr(tool.__name__, fg_color=termstr.Color.red) + " (not available)")
|
||||
extensions = list(extensions_for_tool.get(tool, {"*"}))
|
||||
if hasattr(tool, "command"):
|
||||
print(f"command: {tool.command} foo.{extensions[0]}")
|
||||
else:
|
||||
print("function:", "eris.tools." + tool.__name__)
|
||||
if hasattr(tool, "patch_command") and tool.patch_command is not None:
|
||||
print(f"patch command: {tool.patch_command} foo.{extensions[0]}")
|
||||
print("url:", tool.url)
|
||||
print("extensions:", ", ".join(extensions))
|
||||
print("")
|
||||
|
||||
|
||||
def install_all_tools():
|
||||
|
|
@ -1134,8 +1157,7 @@ def install_all_tools():
|
|||
install_command = ["apt", "-y", "install"] # debian / ubuntu
|
||||
if "ID=fedora\n" in os_release_lines:
|
||||
tools_.remove("lua-check")
|
||||
renames = {"lua5.3": "lua", "python3-bandit": "bandit", "ruby3.1": "ruby",
|
||||
"xz-utils": "xz"}
|
||||
renames = {"lua5.3": "lua", "python3-bandit": "bandit", "xz-utils": "xz"}
|
||||
tools_ = [renames.get(tool, tool) for tool in tools_]
|
||||
install_command = ["dnf", "-y", "install"]
|
||||
elif "ID=arch\n" in os_release_lines:
|
||||
|
|
@ -1143,8 +1165,8 @@ def install_all_tools():
|
|||
tools_.remove("python3-pdfminer") # pdf2txt is not in arch
|
||||
tools_.remove("perl-doc") # perldoc is in perl but not in the path
|
||||
tools_.remove("7zip")
|
||||
renames = {"genisoimage": "cdrkit", "lua5.3": "lua", "ruby3.1": "ruby", "xz-utils": "xz",
|
||||
"g++": "gcc", "golang-go": "go", "lua-check": "luacheck", "php-cli": "php",
|
||||
renames = {"genisoimage": "cdrkit", "lua5.3": "lua", "xz-utils": "xz", "g++": "gcc",
|
||||
"golang-go": "go", "lua-check": "luacheck", "php-cli": "php",
|
||||
"pylint": "python-pylint", "python3-bandit": "bandit", "python3-mypy": "mypy"}
|
||||
tools_ = [renames.get(tool, tool) for tool in tools_]
|
||||
tools_ = ["python-" + tool[len("python3-"):] if tool.startswith("python3-") else tool
|
||||
|
|
@ -1153,8 +1175,8 @@ def install_all_tools():
|
|||
elif "ID=alpine\n" in os_release_lines:
|
||||
tools_.remove("python3-bandit")
|
||||
tools_.remove("wabt")
|
||||
renames = {"genisoimage": "cdrkit", "lua5.3": "lua", "ruby3.1": "ruby", "xz-utils": "xz",
|
||||
"g++": "gcc", "golang-go": "go", "lua-check": "luacheck", "php-cli": "php",
|
||||
renames = {"genisoimage": "cdrkit", "lua5.3": "lua", "xz-utils": "xz", "g++": "gcc",
|
||||
"golang-go": "go", "lua-check": "luacheck", "php-cli": "php",
|
||||
"pylint": "py3-pylint", "tidy": "tidyhtml"}
|
||||
tools_ = [renames.get(tool, tool) for tool in tools_]
|
||||
tools_ = ["py3-" + tool[len("python3-"):] if tool.startswith("python3-") else tool
|
||||
|
|
@ -1166,7 +1188,7 @@ def install_all_tools():
|
|||
def check_arguments():
|
||||
global tools
|
||||
cmdline_help = __doc__ + USAGE.replace("*", "")
|
||||
arguments = docopt.docopt(cmdline_help, help=False)
|
||||
arguments = docopt.docopt(cmdline_help, default_help=False)
|
||||
if arguments["--help"]:
|
||||
print(cmdline_help)
|
||||
sys.exit(0)
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
|
||||
|
||||
__version__ = "v2024.12.20"
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
tool.uv.package = true
|
||||
|
||||
[tool.uv.sources]
|
||||
lscolors = { path = "../lscolors", editable = true }
|
||||
termstr = { path = "../termstr", editable = true }
|
||||
fill3 = { path = "../fill3", editable = true }
|
||||
|
||||
[project]
|
||||
name = "eris"
|
||||
version = "v2024.12.20"
|
||||
description = "Eris maintains an up-to-date set of reports for every file in a codebase."
|
||||
readme = "README.md"
|
||||
authors = [
|
||||
{ name = "Andrew Hamilton", email = "and_hamilton@yahoo.com" },
|
||||
]
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"decorator==5.1.1",
|
||||
"docopt==0.6.2",
|
||||
"fill3",
|
||||
"lscolors",
|
||||
"pexpect==4.8.0",
|
||||
"pillow==10.0.0",
|
||||
"pygments==2.16.1",
|
||||
"pyinotify==0.9.6",
|
||||
"termstr",
|
||||
"toml==0.10.2",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
eris = "eris.__main__:entry_point"
|
||||
eris-worker = "eris.worker:main"
|
||||
eris-webserver = "eris.webserver:main"
|
||||
pydoc_color = "eris.pydoc_color:main"
|
||||
|
||||
[project.urls]
|
||||
homepage = "https://github.com/ahamilton/eris"
|
||||
|
||||
[tool.setuptools]
|
||||
packages=["eris"]
|
||||
py-modules=["sorted_collection"]
|
||||
|
|
@ -30,13 +30,12 @@ import pygments
|
|||
import pygments.lexers
|
||||
import pygments.styles
|
||||
import termstr
|
||||
import toml
|
||||
import tomllib
|
||||
|
||||
import eris
|
||||
|
||||
|
||||
PYTHON_VERSION = "3.11"
|
||||
PYTHON_EXECUTABLE = "python" + PYTHON_VERSION
|
||||
PYTHON_EXECUTABLE = "/usr/bin/python3"
|
||||
CACHE_PATH = ".eris"
|
||||
|
||||
|
||||
|
|
@ -438,7 +437,7 @@ def git_log(path):
|
|||
|
||||
|
||||
def make_tool_function(dependencies, command, url=None, error_status=None,
|
||||
has_color=False, timeout=None):
|
||||
has_color=False, timeout=None, patch_command=None):
|
||||
if url is None:
|
||||
url = dependencies[0]
|
||||
command_parts = command.split()
|
||||
|
|
@ -449,6 +448,7 @@ def make_tool_function(dependencies, command, url=None, error_status=None,
|
|||
def func(path):
|
||||
return _run_command(command_parts + [path], error_status, has_color, timeout)
|
||||
func.command = command
|
||||
func.patch_command = patch_command
|
||||
return func
|
||||
|
||||
|
||||
|
|
@ -456,10 +456,10 @@ elinks, git_diff, git_blame = None, None, None # For linters.
|
|||
|
||||
|
||||
if "ERIS_CONFIG" in os.environ:
|
||||
tools_toml = toml.load(os.environ["ERIS_CONFIG"])
|
||||
tools_toml = tomllib.load(open(os.environ["ERIS_CONFIG"], "rb"))
|
||||
else:
|
||||
with importlib.resources.open_text(eris, "tools.toml") as tools_toml_file:
|
||||
tools_toml = toml.load(tools_toml_file)
|
||||
with importlib.resources.open_binary(eris, "tools.toml") as tools_toml_file:
|
||||
tools_toml = tomllib.load(tools_toml_file)
|
||||
tools_for_extensions = tools_toml["tools_for_extensions"]
|
||||
del tools_toml["tools_for_extensions"]
|
||||
for tool_name, tool_toml in tools_toml.items():
|
||||
|
|
@ -654,13 +654,16 @@ def splitext(path):
|
|||
return root, ext
|
||||
|
||||
|
||||
def python_has_module(python_path, module_name):
|
||||
one_liner = ("import importlib, sys; "
|
||||
f"sys.exit(importlib.util.find_spec('{module_name}') is not None)")
|
||||
return bool(subprocess.call([python_path, "-c", one_liner]))
|
||||
|
||||
|
||||
@functools.cache
|
||||
def is_tool_available(tool):
|
||||
if (hasattr(tool, "command") and tool.command.startswith(f"{PYTHON_EXECUTABLE} -m ")):
|
||||
try:
|
||||
return importlib.util.find_spec(tool.command.split()[2]) is not None
|
||||
except ModuleNotFoundError:
|
||||
return False
|
||||
return python_has_module(PYTHON_EXECUTABLE, tool.command.split()[2])
|
||||
try:
|
||||
return all(shutil.which(executable) for executable in tool.executables)
|
||||
except AttributeError:
|
||||
|
|
@ -1,21 +1,24 @@
|
|||
|
||||
|
||||
# tools_for_extensions is a mapping that defines which tools are run on files of
|
||||
# certain types. The tools are defined below.
|
||||
tools_for_extensions = [
|
||||
[["py"], ["python_syntax", "python_unittests", "pytest", "pydoc", "mypy",
|
||||
"python_coverage", "pycodestyle", "pydocstyle", "pyflakes",
|
||||
"pylint", "python_gut", "python_mccabe", "bandit"]],
|
||||
"python_coverage", "pycodestyle", "pyflakes",
|
||||
"pylint", "python_gut", "python_mccabe", "bandit", "black", "isort"]],
|
||||
# [["pyc"], ["pydisasm"]],
|
||||
[["pl", "pm", "t"], ["perl_syntax", "perldoc"]],
|
||||
[["p6", "pm6"], ["perl6_syntax"]],
|
||||
[["pod", "pod6"], ["perldoc"]],
|
||||
[["c", "h"], ["c_syntax_gcc", "cppcheck"]],
|
||||
[["cc", "cpp", "hpp"], ["cpp_syntax_gcc", "cppcheck"]],
|
||||
[["rb"], ["ruby_syntax"]],
|
||||
[["rb"], ["ruby_syntax", "rubocop"]],
|
||||
[["rs"], ["rustfmt", "clippy"]],
|
||||
[["lua"], ["lua_syntax", "lua_check"]],
|
||||
[["js"], ["js_syntax"]],
|
||||
[["js", "ts"], ["js_syntax", "typescript_check"]],
|
||||
[["php"], ["php8_syntax"]],
|
||||
[["go"], ["go_vet", "godoc"]],
|
||||
[["bash", "sh", "dash", "ksh"], ["shellcheck"]],
|
||||
[["wat"], ["wat_syntax_check"]],
|
||||
[["wasm"], ["wasm_validate", "wasm_objdump"]],
|
||||
[["pdf"], ["pdf2txt"]],
|
||||
[["html", "htm"], ["html_syntax", "html2text", "elinks"]],
|
||||
|
|
@ -41,11 +44,22 @@ tools_for_extensions = [
|
|||
[["iso"], ["isoinfo"]],
|
||||
]
|
||||
|
||||
# Now define all the tools.
|
||||
#
|
||||
# Each section defines a tool by these attributes:
|
||||
# dependencies: A list of debian packages that need to be installed for the tool to run.
|
||||
# url: Where the tool is documented.
|
||||
# command: The shell command to run the tool. All tools must produce a text report given a
|
||||
# file in the codebase. The file's path is added to the end of the command.
|
||||
# All reports are ideally in color. All tools should return an error code of 0 iff
|
||||
# there are no issues with the file.
|
||||
# has_color: Is true if the command's output is in color.
|
||||
# timeout: Some commands have a timeout if they can't be trusted to finish in a reasonable time.
|
||||
|
||||
[python_syntax]
|
||||
dependencies = []
|
||||
url = "https://en.wikipedia.org/wiki/Python_syntax_and_semantics"
|
||||
command = "python3.11 -m py_compile"
|
||||
command = "python3 -m py_compile"
|
||||
|
||||
[pydoc]
|
||||
dependencies = []
|
||||
|
|
@ -58,31 +72,40 @@ tools_for_extensions = [
|
|||
[pycodestyle]
|
||||
dependencies = ["python3-pycodestyle"]
|
||||
url = "http://pycodestyle.pycqa.org/en/latest/"
|
||||
command = "python3.11 -m pycodestyle --max-line-length=100"
|
||||
|
||||
[pydocstyle]
|
||||
dependencies = ["python3-pydocstyle"]
|
||||
url = "http://www.pydocstyle.org/en/2.1.1/usage.html"
|
||||
command = "python3.11 -m pydocstyle --ignore=D1,D213"
|
||||
command = "/usr/bin/python3 -m pycodestyle --max-line-length=100"
|
||||
|
||||
[pyflakes]
|
||||
dependencies = ["python3-pyflakes"]
|
||||
url = "https://pypi.org/project/pyflakes/"
|
||||
command = "python3.11 -m pyflakes"
|
||||
command = "pyflakes3"
|
||||
|
||||
[pylint]
|
||||
dependencies = ["pylint"]
|
||||
url = "https://www.pylint.org/"
|
||||
command = "python3.11 -m pylint -f colorized --errors-only"
|
||||
command = "pylint -f colorized --errors-only"
|
||||
has_color = true
|
||||
|
||||
[bandit]
|
||||
dependencies = ["python3-bandit"]
|
||||
url = "https://pypi.org/project/bandit/"
|
||||
command = "python3.11 -m bandit.cli.main -f screen"
|
||||
command = "bandit -f screen"
|
||||
has_color = true
|
||||
timeout = 60
|
||||
|
||||
[black]
|
||||
dependencies = ["black"]
|
||||
url = "https://github.com/psf/black"
|
||||
command = "black --check --diff --color"
|
||||
patch_command = "black --diff"
|
||||
has_color = true
|
||||
|
||||
[isort]
|
||||
dependencies = ["python3-isort", "python3-colorama"]
|
||||
url = "https://pycqa.github.io/isort/"
|
||||
command = "/usr/bin/python3 -m isort --check-only --diff --color"
|
||||
patch_command = "/usr/bin/python3 -m isort --overwrite-in-place"
|
||||
has_color = true
|
||||
|
||||
[perl_syntax]
|
||||
dependencies = ["perl"]
|
||||
url = "https://en.wikipedia.org/wiki/Perl"
|
||||
|
|
@ -105,6 +128,7 @@ tools_for_extensions = [
|
|||
dependencies = ["git"]
|
||||
url = "https://git-scm.com/docs/git-diff"
|
||||
command = "git diff --exit-code"
|
||||
patch_command = "git checkout"
|
||||
has_color = true
|
||||
|
||||
[git_blame]
|
||||
|
|
@ -147,7 +171,7 @@ tools_for_extensions = [
|
|||
[7z]
|
||||
dependencies = ["7zip"]
|
||||
url = "http://p7zip.sourceforge.net/"
|
||||
command = "7zz l"
|
||||
command = "7z l"
|
||||
|
||||
[unxz]
|
||||
dependencies = ["xz-utils"]
|
||||
|
|
@ -224,10 +248,29 @@ tools_for_extensions = [
|
|||
command = "cppcheck --error-exitcode=1"
|
||||
|
||||
[ruby_syntax]
|
||||
dependencies = ["ruby3.1"]
|
||||
dependencies = ["ruby"]
|
||||
url = "http://www.ruby-lang.org/"
|
||||
command = "ruby -c"
|
||||
|
||||
[rubocop]
|
||||
dependencies = ["rubocop"]
|
||||
url = "https://rubocop.org/"
|
||||
command = "rubocop --color --fail-level autocorrect --display-style-guide"
|
||||
patch_command = "rubocop --autocorrect"
|
||||
has_color = true
|
||||
|
||||
[rustfmt]
|
||||
dependencies = ["rustfmt"]
|
||||
url = "https://github.com/rust-lang/rustfmt"
|
||||
command = "cargo fmt --check -- --color always"
|
||||
has_color = true
|
||||
|
||||
[clippy]
|
||||
dependencies = ["rust-clippy"]
|
||||
url = "https://github.com/rust-lang/rust-clippy"
|
||||
command = "rustc -Awarnings -Dclippy::all"
|
||||
has_color = true
|
||||
|
||||
[lua_syntax]
|
||||
dependencies = ["lua5.3"]
|
||||
url = "http://www.lua.org"
|
||||
|
|
@ -238,6 +281,12 @@ tools_for_extensions = [
|
|||
url = "http://nodejs.org/"
|
||||
command = "node --check"
|
||||
|
||||
[typescript_check]
|
||||
dependencies = ["node-typescript"]
|
||||
url = "https://www.typescriptlang.org/"
|
||||
command = "tsc --pretty --noEmit"
|
||||
has_color = true
|
||||
|
||||
[lua_check]
|
||||
dependencies = ["lua-check"]
|
||||
url = "https://github.com/mpeterv/luacheck"
|
||||
|
|
@ -249,6 +298,11 @@ tools_for_extensions = [
|
|||
url = "https://github.com/golang/go"
|
||||
command = "go vet"
|
||||
|
||||
[wat_syntax_check]
|
||||
dependencies = ["wabt"]
|
||||
url = "https://github.com/WebAssembly/wabt"
|
||||
command = "wat2wasm --check-only"
|
||||
|
||||
[wasm_validate]
|
||||
dependencies = ["wabt"]
|
||||
url = "https://github.com/WebAssembly/wabt"
|
||||
|
|
@ -262,7 +316,7 @@ tools_for_extensions = [
|
|||
[yamllint]
|
||||
dependencies = ["yamllint"]
|
||||
url = "https://github.com/adrienverge/yamllint"
|
||||
command = "python3.11 -m yamllint -f colored"
|
||||
command = "yamllint -f colored"
|
||||
has_color = true
|
||||
|
||||
[mediainfo]
|
||||
160
eris/uv.lock
generated
|
|
@ -1,160 +0,0 @@
|
|||
version = 1
|
||||
requires-python = ">=3.11"
|
||||
|
||||
[[package]]
|
||||
name = "cwcwidth"
|
||||
version = "0.1.5"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/38/17/aadd0c6190dca91aa27c4d7e84d69d30fdf4966e7764247cdc395f8fe7d9/cwcwidth-0.1.5.tar.gz", hash = "sha256:2c840e7d85f6de45c45986b416d79312c91882e1121b78d4c347e49c4238c09d", size = 11071 }
|
||||
|
||||
[[package]]
|
||||
name = "decorator"
|
||||
version = "5.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "docopt"
|
||||
version = "0.6.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", size = 25901 }
|
||||
|
||||
[[package]]
|
||||
name = "eris"
|
||||
version = "2024.12.18"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "decorator" },
|
||||
{ name = "docopt" },
|
||||
{ name = "fill3" },
|
||||
{ name = "lscolors" },
|
||||
{ name = "pexpect" },
|
||||
{ name = "pillow" },
|
||||
{ name = "pygments" },
|
||||
{ name = "pyinotify" },
|
||||
{ name = "termstr" },
|
||||
{ name = "toml" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "decorator", specifier = "==5.1.1" },
|
||||
{ name = "docopt", specifier = "==0.6.2" },
|
||||
{ name = "fill3", editable = "../fill3" },
|
||||
{ name = "lscolors", editable = "../lscolors" },
|
||||
{ name = "pexpect", specifier = "==4.8.0" },
|
||||
{ name = "pillow", specifier = "==10.0.0" },
|
||||
{ name = "pygments", specifier = "==2.16.1" },
|
||||
{ name = "pyinotify", specifier = "==0.9.6" },
|
||||
{ name = "termstr", editable = "../termstr" },
|
||||
{ name = "toml", specifier = "==0.10.2" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fill3"
|
||||
version = "2024.12.18"
|
||||
source = { editable = "../fill3" }
|
||||
dependencies = [
|
||||
{ name = "termstr" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "termstr", virtual = "../termstr" }]
|
||||
|
||||
[[package]]
|
||||
name = "lscolors"
|
||||
version = "2024.12.18"
|
||||
source = { editable = "../lscolors" }
|
||||
dependencies = [
|
||||
{ name = "termstr" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "termstr", virtual = "../termstr" }]
|
||||
|
||||
[[package]]
|
||||
name = "pexpect"
|
||||
version = "4.8.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "ptyprocess" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e5/9b/ff402e0e930e70467a7178abb7c128709a30dfb22d8777c043e501bc1b10/pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c", size = 157037 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/39/7b/88dbb785881c28a102619d46423cb853b46dbccc70d3ac362d99773a78ce/pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937", size = 59024 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pillow"
|
||||
version = "10.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/0f/8b/2ebaf9adcf4260c00f842154865f8730cf745906aa5dd499141fb6063e26/Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396", size = 50527522 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/7a/54/f6a14d95cba8ff082c550d836c9e5c23f1641d2ac291c23efe0494219b8c/Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485", size = 3398781 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/ad/71982d18fd28ed1f93c31b8648f980ebdbdbcf7d8c9c9b4af59290914ce9/Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f", size = 3111873 },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/5c/04224bf1a8247d6bbba375248d74668724a5a9879b4c42c23dfadd0c28ae/Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3", size = 3117246 },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/de/b07418f00cd78af292ceb4e2855c158ef8477dc1cbcdac3e1f32eb4e53b6/Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d", size = 3314475 },
|
||||
{ url = "https://files.pythonhosted.org/packages/79/53/3a7277ae95bfe86b8b4db0ed1d08c4924aa2dfbfe51b8fe0e310b160a9c6/Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd", size = 3169201 },
|
||||
{ url = "https://files.pythonhosted.org/packages/16/89/818fa238e37a47a29bb8495ca2cafdd514599a89f19ada7916348a74b5f9/Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629", size = 3421012 },
|
||||
{ url = "https://files.pythonhosted.org/packages/72/17/6c1e6b0f78d21838844318057b7a939ab8a8d92deeb51d22563202b2db64/Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538", size = 3355277 },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/58/0a62422b3cf188dac72fe6c54b6f3f372ec2e84043eb4f8d2158626992b7/Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d", size = 3420294 },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/d4/054e491f0880bf0119ee79cdc03264e01d5732e06c454da8c69b83a7c8f2/Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f", size = 2513082 },
|
||||
{ url = "https://files.pythonhosted.org/packages/6a/33/c278084a811d7a7a17c8dd14cb261248fdd0265263760fb753a5a719241e/Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37", size = 2501798 },
|
||||
{ url = "https://files.pythonhosted.org/packages/9c/e8/59271ada18cec229d4a79475a45a9e64367e54e5d1f488b030af63805960/Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883", size = 3398485 },
|
||||
{ url = "https://files.pythonhosted.org/packages/f0/7f/ff6ce4360dccfacc3af3462cfcd2d7481a1cc8d6aa712927072016dd6755/Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e", size = 3111012 },
|
||||
{ url = "https://files.pythonhosted.org/packages/2e/a4/06f84d3fe7aa9558d2b80d8d4960fe07071a53e8d3ccac8b079905003048/Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640", size = 3117406 },
|
||||
{ url = "https://files.pythonhosted.org/packages/a8/7b/f8ed885d18096930991bbaac729024435e0343a3c81062811cf865205a79/Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568", size = 3315095 },
|
||||
{ url = "https://files.pythonhosted.org/packages/54/2e/04bae205c5bf3ff7e58735b73a1d3943d0e33e0f7ca8637aa30a2acd06d0/Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223", size = 3169235 },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/82/39a266a0626d2c0dd4ee341639fe7749268fc871429b90006eeb1583f24b/Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff", size = 3421158 },
|
||||
{ url = "https://files.pythonhosted.org/packages/4d/61/eba2506ce68706ccb7d485cee968e35fa9ee797d77520760acf41a65f281/Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551", size = 3355694 },
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/0b/0f37aac8432fb91e9f7eec96a29afb354f172e593d2d6d8201e544f49b55/Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5", size = 3421380 },
|
||||
{ url = "https://files.pythonhosted.org/packages/e7/af/06fa67e8c8c4ead837f6a4025b6605f4cb8ec0fcbff1e4c697712fabf9f9/Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199", size = 2513485 },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/c0/aaa4f7f9f0ed854d8b519739392ed17ee1aaaa352fd037646e97634a6bdb/Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca", size = 2502324 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ptyprocess"
|
||||
version = "0.7.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.16.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/f7/4d461ddf9c2bcd6a4d7b2b139267ca32a69439387cc1f02a924ff8883825/Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29", size = 4872980 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/43/88/29adf0b44ba6ac85045e63734ae0997d3c58d8b1a91c914d240828d0d73d/Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", size = 1164750 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyinotify"
|
||||
version = "0.9.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/e3/c0/fd5b18dde17c1249658521f69598f3252f11d9d7a980c5be8619970646e1/pyinotify-0.9.6.tar.gz", hash = "sha256:9c998a5d7606ca835065cdabc013ae6c66eb9ea76a00a1e3bc6e0cfe2b4f71f4", size = 60998 }
|
||||
|
||||
[[package]]
|
||||
name = "termstr"
|
||||
version = "2024.12.18"
|
||||
source = { editable = "../termstr" }
|
||||
dependencies = [
|
||||
{ name = "cwcwidth" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "cwcwidth", specifier = "==0.1.5" }]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.10.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588 },
|
||||
]
|
||||
|
|
@ -15,7 +15,7 @@ import fill3.terminal as terminal
|
|||
import termstr
|
||||
|
||||
|
||||
__version__ = "v2024.12.20"
|
||||
__version__ = "v2025.07.11"
|
||||
|
||||
|
||||
##########################
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
tool.uv.package = true
|
||||
|
||||
[tool.uv.sources]
|
||||
termstr = { path = "../termstr" }
|
||||
|
||||
[project]
|
||||
name = "fill3"
|
||||
version = "v2024.12.20"
|
||||
version = "v2025.07.11"
|
||||
description = "Fill3 provides basic widgets for a tui."
|
||||
authors = [
|
||||
{ name = "Andrew Hamilton", email = "and_hamilton@yahoo.com" },
|
||||
|
|
@ -17,3 +14,6 @@ dependencies = [
|
|||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/ahamilton/eris"
|
||||
|
||||
[tool.uv.sources]
|
||||
termstr = { workspace = true }
|
||||
|
|
|
|||
30
fill3/uv.lock
generated
|
|
@ -1,30 +0,0 @@
|
|||
version = 1
|
||||
requires-python = ">=3.11"
|
||||
|
||||
[[package]]
|
||||
name = "cwcwidth"
|
||||
version = "0.1.5"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/38/17/aadd0c6190dca91aa27c4d7e84d69d30fdf4966e7764247cdc395f8fe7d9/cwcwidth-0.1.5.tar.gz", hash = "sha256:2c840e7d85f6de45c45986b416d79312c91882e1121b78d4c347e49c4238c09d", size = 11071 }
|
||||
|
||||
[[package]]
|
||||
name = "fill3"
|
||||
version = "2024.12.18"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "termstr" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "termstr", virtual = "../termstr" }]
|
||||
|
||||
[[package]]
|
||||
name = "termstr"
|
||||
version = "2024.12.18"
|
||||
source = { virtual = "../termstr" }
|
||||
dependencies = [
|
||||
{ name = "cwcwidth" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "cwcwidth", specifier = "==0.1.5" }]
|
||||
2
install
|
|
@ -5,5 +5,5 @@ set -e
|
|||
set -x
|
||||
|
||||
|
||||
pipx install --system-site-packages "$@" ./eris
|
||||
uv tool install "$@" .
|
||||
eris --install-all-tools
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import lscolors
|
|||
import termstr
|
||||
|
||||
|
||||
__version__ = "v2024.12.20"
|
||||
__version__ = "v2025.07.11"
|
||||
|
||||
|
||||
FILE_KEY = "fi"
|
||||
|
|
|
|||
|
|
@ -5,12 +5,9 @@ build-backend = "hatchling.build"
|
|||
[tool.hatch.metadata]
|
||||
allow-direct-references = true
|
||||
|
||||
[tool.uv.sources]
|
||||
termstr = { path = "../termstr" }
|
||||
|
||||
[project]
|
||||
name = "lscolors"
|
||||
version = "v2024.12.20"
|
||||
version = "v2025.07.11"
|
||||
description = "Give coloring for file types as in the ls command."
|
||||
authors = [
|
||||
{ name = "Andrew Hamilton", email = "and_hamilton@yahoo.com" },
|
||||
|
|
@ -20,6 +17,9 @@ dependencies = [
|
|||
"termstr",
|
||||
]
|
||||
|
||||
[tool.uv.sources]
|
||||
termstr = { workspace = true }
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/ahamilton/eris"
|
||||
|
||||
|
|
|
|||
30
lscolors/uv.lock
generated
|
|
@ -1,30 +0,0 @@
|
|||
version = 1
|
||||
requires-python = ">=3.11"
|
||||
|
||||
[[package]]
|
||||
name = "cwcwidth"
|
||||
version = "0.1.5"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/38/17/aadd0c6190dca91aa27c4d7e84d69d30fdf4966e7764247cdc395f8fe7d9/cwcwidth-0.1.5.tar.gz", hash = "sha256:2c840e7d85f6de45c45986b416d79312c91882e1121b78d4c347e49c4238c09d", size = 11071 }
|
||||
|
||||
[[package]]
|
||||
name = "lscolors"
|
||||
version = "2024.12.18"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "termstr" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "termstr", virtual = "../termstr" }]
|
||||
|
||||
[[package]]
|
||||
name = "termstr"
|
||||
version = "2024.12.18"
|
||||
source = { virtual = "../termstr" }
|
||||
dependencies = [
|
||||
{ name = "cwcwidth" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "cwcwidth", specifier = "==0.1.5" }]
|
||||
|
|
@ -18,23 +18,26 @@ def main():
|
|||
|
||||
## Summary
|
||||
|
||||
Eris maintains an up-to-date set of reports for every file in a codebase.
|
||||
Eris maintains an up to date set of reports for every file in a codebase.
|
||||
|
||||
## Installation
|
||||
|
||||
#### Debian / Ubuntu / Fedora / Arch / Alpine
|
||||
|
||||
Install eris with pipx, then install all the tools eris uses:
|
||||
Eris can be installed by pipx or [uv](https://docs.astral.sh/uv/getting-started/installation/).
|
||||
|
||||
To install with pipx:
|
||||
|
||||
pipx install git+https://gitlab.com/ahamilton/eris@v2025.07.11
|
||||
|
||||
or to install with uv:
|
||||
|
||||
uv tool install git+https://gitlab.com/ahamilton/eris@v2025.07.11
|
||||
|
||||
Then use eris to install all the tools it uses:
|
||||
|
||||
pipx install --system-site-packages git+https://gitlab.com/ahamilton/eris@v2024.12.20#subdirectory=eris
|
||||
eris --install-all-tools
|
||||
|
||||
Or install from source: (includes tools)
|
||||
|
||||
git clone https://gitlab.com/ahamilton/eris
|
||||
cd eris
|
||||
./install
|
||||
|
||||
Then to run:
|
||||
|
||||
eris
|
||||
|
|
|
|||
|
|
@ -16,9 +16,11 @@ CURRENT_VERSION=$(git describe --tags --abbrev=0)
|
|||
if [ $NEW_VERSION == $CURRENT_VERSION ]; then
|
||||
git tag --delete $CURRENT_VERSION
|
||||
git push --delete origin $CURRENT_VERSION
|
||||
else
|
||||
git grep --no-color -l $CURRENT_VERSION | xargs sed -i "s/$CURRENT_VERSION/$NEW_VERSION/g"
|
||||
uv lock
|
||||
git commit --all --message="Update version to $NEW_VERSION"
|
||||
fi
|
||||
git grep --no-color -l $CURRENT_VERSION | xargs sed -i "s/$CURRENT_VERSION/$NEW_VERSION/g"
|
||||
git commit --all --message="Update version to $NEW_VERSION"
|
||||
git tag $NEW_VERSION
|
||||
git push
|
||||
git push --tags
|
||||
|
|
|
|||
48
pyproject.toml
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
tool.uv.package = true
|
||||
|
||||
[project]
|
||||
name = "eris"
|
||||
version = "v2025.07.11"
|
||||
description = "Eris maintains an up-to-date set of reports for every file in a codebase."
|
||||
readme = "README.md"
|
||||
authors = [
|
||||
{ name = "Andrew Hamilton", email = "and_hamilton@yahoo.com" },
|
||||
]
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"docopt-ng==0.9.0",
|
||||
"fill3 @ git+https://gitlab.com/ahamilton/eris@v2025.07.11#subdirectory=fill3",
|
||||
"lscolors @ git+https://gitlab.com/ahamilton/eris@v2025.07.11#subdirectory=lscolors",
|
||||
"pexpect==4.9.0",
|
||||
"pillow==11.2.1",
|
||||
"pygments==2.19.1",
|
||||
"pyinotify-elephant-fork==0.0.1",
|
||||
"termstr @ git+https://gitlab.com/ahamilton/eris@v2025.07.11#subdirectory=termstr",
|
||||
]
|
||||
|
||||
[tool.uv.sources]
|
||||
fill3 = { workspace = true }
|
||||
lscolors = { workspace = true }
|
||||
termstr = { workspace = true }
|
||||
|
||||
[tool.uv.workspace]
|
||||
members = ["termstr", "fill3", "lscolors"]
|
||||
|
||||
[project.scripts]
|
||||
eris = "eris.__main__:entry_point"
|
||||
eris-worker = "eris.worker:main"
|
||||
eris-webserver = "eris.webserver:main"
|
||||
pydoc_color = "eris.pydoc_color:main"
|
||||
|
||||
[project.urls]
|
||||
homepage = "https://github.com/ahamilton/eris"
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools>=61.0"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
|
||||
[tool.setuptools]
|
||||
packages=["eris"]
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
"eris" = ["tools.toml"]
|
||||
|
|
@ -1,6 +1,8 @@
|
|||
tool.uv.package = true
|
||||
|
||||
[project]
|
||||
name = "termstr"
|
||||
version = "v2024.12.20"
|
||||
version = "v2025.07.11"
|
||||
description = "Termstr provides strings with extra terminal styling."
|
||||
authors = [
|
||||
{ name = "Andrew Hamilton", email = "and_hamilton@yahoo.com" },
|
||||
|
|
@ -12,6 +14,3 @@ dependencies = [
|
|||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/ahamilton/eris"
|
||||
|
||||
[tool.setuptools]
|
||||
py-modules=["termstr"]
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import weakref
|
|||
import cwcwidth
|
||||
|
||||
|
||||
__version__ = "v2024.12.20"
|
||||
__version__ = "v2025.07.11"
|
||||
|
||||
|
||||
ESC = "\x1b"
|
||||
19
termstr/uv.lock
generated
|
|
@ -1,19 +0,0 @@
|
|||
version = 1
|
||||
requires-python = ">=3.11"
|
||||
|
||||
[[package]]
|
||||
name = "cwcwidth"
|
||||
version = "0.1.5"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/38/17/aadd0c6190dca91aa27c4d7e84d69d30fdf4966e7764247cdc395f8fe7d9/cwcwidth-0.1.5.tar.gz", hash = "sha256:2c840e7d85f6de45c45986b416d79312c91882e1121b78d4c347e49c4238c09d", size = 11071 }
|
||||
|
||||
[[package]]
|
||||
name = "termstr"
|
||||
version = "2024.12.18"
|
||||
source = { virtual = "." }
|
||||
dependencies = [
|
||||
{ name = "cwcwidth" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [{ name = "cwcwidth", specifier = "==0.1.5" }]
|
||||
4
test-all
|
|
@ -4,9 +4,9 @@
|
|||
FAILURE=0
|
||||
CODEBASE_PATH=$(dirname $0)
|
||||
cd ${CODEBASE_PATH}
|
||||
for test in {termstr,fill3,lscolors,eris}/tests/*_test.py; do
|
||||
for test in {termstr/,fill3/,lscolors/,}tests/*_test.py; do
|
||||
echo "Testing $test …"
|
||||
./${test} 2>&1
|
||||
${test} 2>&1
|
||||
FAILURE=$(($FAILURE | $?))
|
||||
echo
|
||||
done
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 108 B |
|
Before Width: | Height: | Size: 381 B After Width: | Height: | Size: 381 B |
|
Before Width: | Height: | Size: 320 B After Width: | Height: | Size: 320 B |
|
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1 KiB |
|
|
@ -1,4 +1,4 @@
|
|||
[m[38;2;255;255;255m[48;2;32;32;32m [m[38;2;255;255;255m[48;2;0;0;0m
|
||||
[m[38;2;255;255;255m[48;2;32;32;32m [m[38;2;255;255;255m[48;2;0;0;0m
|
||||
[m[38;2;110;191;38m[48;2;32;32;32m[1mdef[m[38;2;208;208;208m[48;2;32;32;32m [m[38;2;113;173;255m[48;2;32;32;32mhi[m[38;2;208;208;208m[48;2;32;32;32m():[m[38;2;255;255;255m[48;2;32;32;32m [m[38;2;255;255;255m[48;2;0;0;0m
|
||||
[m[38;2;110;191;38m[48;2;32;32;32m[1mdef[m[38;2;102;102;102m[48;2;32;32;32m [m[38;2;113;173;255m[48;2;32;32;32mhi[m[38;2;208;208;208m[48;2;32;32;32m():[m[38;2;255;255;255m[48;2;32;32;32m [m[38;2;255;255;255m[48;2;0;0;0m
|
||||
[m[38;2;208;208;208m[48;2;32;32;32m [m[38;2;47;188;205m[48;2;32;32;32mprint[m[38;2;208;208;208m[48;2;32;32;32m([m[38;2;237;157;19m[48;2;32;32;32m"hi"[m[38;2;208;208;208m[48;2;32;32;32m)[m
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
[m[38;2;255;255;255m[48;2;32;32;32m [m[38;2;255;255;255m[48;2;0;0;0m
|
||||
[m[38;2;255;255;255m[48;2;32;32;32m [m[38;2;255;255;255m[48;2;0;0;0m
|
||||
[m[38;2;110;191;38m[48;2;32;32;32m[1mdef[m[38;2;208;208;208m[48;2;32;32;32m [m[38;2;113;173;255m[48;2;32;32;32mhi[m[38;2;208;208;208m[48;2;32;32;32m():[m
|
||||
[m[38;2;110;191;38m[48;2;32;32;32m[1mdef[m[38;2;102;102;102m[48;2;32;32;32m [m[38;2;113;173;255m[48;2;32;32;32mhi[m[38;2;208;208;208m[48;2;32;32;32m():[m
|
||||