argusf 0.1.0.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. argusf/__init__.py +3 -0
  2. argusf/analysis/__init__.py +14 -0
  3. argusf/analysis/engine.py +100 -0
  4. argusf/analysis/rule.py +45 -0
  5. argusf/analysis/rules/__init__.py +5 -0
  6. argusf/analysis/rules/documentation.py +30 -0
  7. argusf/analysis/rules/findings.py +67 -0
  8. argusf/analysis/rules/registry.py +22 -0
  9. argusf/analysis/rules/rulesets/__init__.py +4 -0
  10. argusf/analysis/rules/rulesets/rgus/__init__.py +22 -0
  11. argusf/analysis/rules/rulesets/rgus/rgus001_no_goto.py +54 -0
  12. argusf/analysis/rules/rulesets/rgus/rgus002_common_block.py +55 -0
  13. argusf/analysis/rules/rulesets/rgus/rgus003_equivalence.py +55 -0
  14. argusf/analysis/rules/rulesets/rgus/rgus004_implicit_typing.py +129 -0
  15. argusf/analysis/rules/rulesets/rgus/rgus005_arithmetic_if.py +62 -0
  16. argusf/analysis/rules/rulesets/rgus/rgus006_entry_statement.py +67 -0
  17. argusf/analysis/rules/rulesets/rgus/rgus007_pause_statement.py +93 -0
  18. argusf/analysis/rules/rulesets/rgus/rgus008_todo_comment.py +100 -0
  19. argusf/analysis/rules/rulesets/rgus/rgus009_unsorted_use_statements.py +258 -0
  20. argusf/analysis/rules/selection.py +83 -0
  21. argusf/analysis/suppression.py +92 -0
  22. argusf/analysis/syntax_errors.py +41 -0
  23. argusf/autofix/__init__.py +26 -0
  24. argusf/autofix/applier.py +130 -0
  25. argusf/autofix/context.py +82 -0
  26. argusf/autofix/diff.py +39 -0
  27. argusf/autofix/edits.py +31 -0
  28. argusf/autofix/engine.py +192 -0
  29. argusf/autofix/models.py +39 -0
  30. argusf/autofix/source.py +68 -0
  31. argusf/autofix/writer.py +53 -0
  32. argusf/cache/__init__.py +5 -0
  33. argusf/cache/backend.py +294 -0
  34. argusf/cli.py +428 -0
  35. argusf/config/__init__.py +1 -0
  36. argusf/config/config_resolver.py +212 -0
  37. argusf/config/errors.py +8 -0
  38. argusf/config/file_reader/__init__.py +3 -0
  39. argusf/config/file_reader/reader.py +58 -0
  40. argusf/config/models.py +110 -0
  41. argusf/config/validation.py +113 -0
  42. argusf/constants.py +66 -0
  43. argusf/diagnostics.py +45 -0
  44. argusf/discovery/__init__.py +3 -0
  45. argusf/discovery/backend.py +250 -0
  46. argusf/discovery/gitignore.py +125 -0
  47. argusf/discovery/repo.py +30 -0
  48. argusf/hashing/__init__.py +5 -0
  49. argusf/hashing/hash.py +48 -0
  50. argusf/ir/__init__.py +1 -0
  51. argusf/ir/models/__init__.py +49 -0
  52. argusf/ir/models/findings.py +74 -0
  53. argusf/ir/models/source.py +199 -0
  54. argusf/orchestrator.py +127 -0
  55. argusf/parser/__init__.py +1 -0
  56. argusf/parser/backend.py +24 -0
  57. argusf/parser/treesitter/__init__.py +1 -0
  58. argusf/parser/treesitter/backend.py +157 -0
  59. argusf/parser/treesitter/walker/__init__.py +5 -0
  60. argusf/parser/treesitter/walker/handlers.py +209 -0
  61. argusf/parser/treesitter/walker/walker.py +82 -0
  62. argusf/registry/__init__.py +3 -0
  63. argusf/registry/registry.py +69 -0
  64. argusf/reporting/__init__.py +22 -0
  65. argusf/reporting/formatting.py +162 -0
  66. argusf/reporting/registry.py +20 -0
  67. argusf/reporting/reporters/__init__.py +15 -0
  68. argusf/reporting/reporters/base.py +29 -0
  69. argusf/reporting/reporters/concise.py +35 -0
  70. argusf/reporting/reporters/diff.py +30 -0
  71. argusf/reporting/reporters/json.py +59 -0
  72. argusf/reporting/reporters/null.py +21 -0
  73. argusf/reporting/reporters/standard.py +78 -0
  74. argusf/reporting/reporters/statistics.py +99 -0
  75. argusf-0.1.0.dev0.dist-info/METADATA +166 -0
  76. argusf-0.1.0.dev0.dist-info/RECORD +79 -0
  77. argusf-0.1.0.dev0.dist-info/WHEEL +4 -0
  78. argusf-0.1.0.dev0.dist-info/entry_points.txt +3 -0
  79. argusf-0.1.0.dev0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,166 @@
1
+ Metadata-Version: 2.4
2
+ Name: argusf
3
+ Version: 0.1.0.dev0
4
+ Summary: A ruff-inspired linter for Fortran 90
5
+ Keywords: fortran,linter,static-analysis,static-analyzer,code-quality,fortran90,ruff
6
+ Author: Matthew McAteer
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Fortran
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3 :: Only
16
+ Classifier: Programming Language :: Python :: 3.14
17
+ Classifier: Topic :: Software Development :: Quality Assurance
18
+ Requires-Dist: click>=8.3.3
19
+ Requires-Dist: msgpack>=1.2.0
20
+ Requires-Dist: packaging>=26.2
21
+ Requires-Dist: pathspec>=1.1.1
22
+ Requires-Dist: tree-sitter==0.25.2
23
+ Requires-Dist: tree-sitter-fortran>=0.6.0
24
+ Requires-Python: >=3.14
25
+ Project-URL: Homepage, https://github.com/mmcateer13/argusf
26
+ Project-URL: Repository, https://github.com/mmcateer13/argusf
27
+ Project-URL: Issues, https://github.com/mmcateer13/argusf/issues
28
+ Description-Content-Type: text/markdown
29
+
30
+ # argusf
31
+
32
+ <!-- Badges -->
33
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
34
+ [![Python Version](https://img.shields.io/badge/python-3.14+-blue.svg)](https://www.python.org/)
35
+ <!-- [![CI](https://github.com/mmcateer13/argusf/actions/workflows/YOUR_WORKFLOW.yml/badge.svg)](https://github.com/mmcateer13/argusf/actions) -->
36
+
37
+ A [ruff](https://github.com/astral-sh/ruff)-inspired linter for Fortran 90.
38
+
39
+ [Issues](https://github.com/mmcateer13/argusf/issues) | [Contributing](CONTRIBUTING.md) | [Security](SECURITY.md)
40
+
41
+ ## Table of Contents
42
+
43
+ 1. [What is argusf?](#what-is-argusf)
44
+ 2. [Current State](#current-state)
45
+ 3. [Getting Started](#getting-started)
46
+ 4. [Available Rules](#available-rules)
47
+ 5. [Contributing & Support](#contributing--support)
48
+ 6. [Acknowledgements](#acknowledgements)
49
+ 7. [License](#license)
50
+
51
+ ## What is argusf?
52
+
53
+ argusf is a linter for Fortran 90 codebases, designed with the philosophy of tools like [ruff](https://github.com/astral-sh/ruff): opinionated, and easy to integrate into existing workflows. It analyses your Fortran 90 source files and reports style and quality issues to help you maintain a consistent, readable codebase.
54
+
55
+ - 🔧 **Zero configuration required** — sensible defaults out of the box; customise via `argusf.toml` when you need to
56
+ - 📁 **Scan a file or a whole directory** — just point it at your code
57
+ - 📍 **Precise output** — violations reported with file, line, and column
58
+ - 🔄 **JSON output support** — easy to integrate into CI pipelines and tooling
59
+ - 🎯 **Fortran 90 focused** — purpose-built for the language
60
+
61
+ ## Current State
62
+
63
+ argusf is an early-stage project. The core internals are working, but the available ruleset is still extremely limited. If you try argusf and encounter unexpected behaviour, missing rules you would find useful, or other issues, please [open an issue](https://github.com/mmcateer13/argusf/issues) — early feedback is especially valuable at this stage.
64
+
65
+ ## Getting Started
66
+
67
+ ### Installation
68
+
69
+ > [!NOTE]
70
+ > If you are planning to contribute to argusf, please see the [contributing guide](CONTRIBUTING.md) and [developer setup instructions](docs/dev_setup.md) instead.
71
+
72
+ argusf runs on macOS, Linux, and Windows. (Note that the [developer setup instructions](docs/dev_setup.md) currently target macOS and Linux only — this applies to setting up a development environment, not to running the tool.)
73
+
74
+ Installing argusf requires [uv](https://github.com/astral-sh/uv); if you do not already have it, follow the [uv installation guide](https://docs.astral.sh/uv/getting-started/installation/).
75
+
76
+ argusf is not yet available on PyPI. To install it, clone the repository and install it from the local checkout with `uv`, which builds it from source (no PyPI release required) and puts the `argusf` command on your `PATH`:
77
+
78
+ ```bash
79
+ git clone https://github.com/mmcateer13/argusf.git
80
+ cd argusf
81
+ uv tool install --editable .
82
+ ```
83
+
84
+ The `--editable` flag means a later `git pull` is picked up without reinstalling. To update after pulling — or if you installed without `--editable` — run `uv tool install --editable . --reinstall`.
85
+
86
+ ### Usage
87
+
88
+ ```bash
89
+ argusf check # Analyse the current directory
90
+ argusf check path/to/file.f90 # Analyse a single file
91
+ argusf check path/to/your/code/ # Analyse an entire directory
92
+ argusf check --output-format json path/to/your/code/ # Output findings as JSON
93
+ argusf check --fix path/to/your/code/ # Apply safe fixes automatically
94
+ ```
95
+
96
+ ### Configuration
97
+
98
+ argusf works out of the box with no configuration. To customise behaviour, add an `argusf.toml` file to the root of your project.
99
+
100
+ The snippet below is equivalent to argusf's out-of-the-box defaults — a handy central reference for what the tool does before you change anything. You only need to include the keys you want to override. It is a hand-maintained snapshot and may lag the code between releases; `argusf --help` and `argusf check --help` are the authoritative source for current defaults.
101
+
102
+ ```toml
103
+ # Top-level options
104
+ include = ["*.F", "*.F77", "*.F90", "*.FOR", "*.FTN", "*.f", "*.f77", "*.f90", "*.for", "*.ftn"]
105
+ exclude = [
106
+ ".argusf_cache", ".direnv", ".git", ".hg", ".idea", ".mypy_cache",
107
+ ".pytest_cache", ".ruff_cache", ".svn", ".venv", ".vscode",
108
+ "__pycache__", "_build", "bin", "build", "dist", "obj", "venv",
109
+ ]
110
+ extend_include = []
111
+ extend_exclude = []
112
+ respect_gitignore = true
113
+ cache_dir = ".argusf_cache"
114
+ no_cache = false
115
+ output_format = "standard" # "standard", "concise", or "json"
116
+ # on_large_file is unset by default (guardrail off); set "warn" or "skip" to enable.
117
+ large_file_threshold = "1MB"
118
+ fix = false
119
+ fix_only = false
120
+ unsafe_fixes = false
121
+ show_fixes = false
122
+
123
+ [lint]
124
+ select = ["RGUS"]
125
+ extend_select = []
126
+ ignore = []
127
+ preview = false
128
+ fixable = ["ALL"]
129
+ unfixable = []
130
+ extend_fixable = []
131
+ task_tags = ["TODO", "FIXME", "XXX"]
132
+ # per_file_ignores is empty by default, e.g.:
133
+ # [lint.per_file_ignores]
134
+ # "tests/**" = ["RGUS001"]
135
+ ```
136
+
137
+ For the full set of options and flags, run `argusf --help` and `argusf check --help` (and `--help` on any subcommand) — these are the authoritative reference for available arguments and options.
138
+
139
+ ## Available Rules
140
+
141
+ Rule information lives in the CLI itself — use the `argusf rule` command to read a rule's documentation, including its rationale, an example, and any available fix:
142
+
143
+ ```bash
144
+ argusf rule --all # documentation for every rule
145
+ argusf rule RGUS001 # documentation for a specific rule
146
+ ```
147
+
148
+ Dedicated, per-rule documentation pages are planned for a later release. In the meantime, `argusf rule` is the authoritative source, and you can always read the current ruleset in the [source](https://github.com/mmcateer13/argusf/tree/development/src/argusf/analysis/rules/rulesets).
149
+
150
+ ## Contributing & Support
151
+
152
+ Contributions are welcome. For bug reports, questions, or feature requests, please [open an issue](https://github.com/mmcateer13/argusf/issues).
153
+
154
+ If you would like to contribute code, see [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions and guidelines.
155
+
156
+ To report a security vulnerability, please follow the process in [SECURITY.md](SECURITY.md) rather than opening a public issue.
157
+
158
+ ## Acknowledgements
159
+
160
+ This project is a faithful iteration on the dissertation project that I completed in my final year of study at [Queen's University Belfast](https://www.qub.ac.uk/), under the supervision of [Prof. Austen Rainer](https://pure.qub.ac.uk/en/persons/austen-rainer/) and [Dr. David Cutting](https://pure.qub.ac.uk/en/persons/david-cutting/). Their support throughout the project's initial development is part of the reason I felt so eager to continue this project today.
161
+
162
+ A shoutout to the [Astral](https://astral.sh/) team who designed tools such as [ruff](https://github.com/astral-sh/ruff), [uv](https://github.com/astral-sh/uv), and [ty](https://github.com/astral-sh/ty). As an engineer whose (fairly short) career experience is almost entirely Python, the improvements their tooling has made in developer experience across the Python ecosystem has been nothing short of extraordinary. This tool takes heavy inspiration from the `ruff` linter, in an attempt to take even a fraction of this transformative DevEx improvement into the Fortran community!
163
+
164
+ ## License
165
+
166
+ argusf is licensed under the [MIT License](LICENSE).
@@ -0,0 +1,79 @@
1
+ argusf/__init__.py,sha256=XZ_bWR5Mh-KCT0Dm9J4o4Y6bqeyQEw5vPYWhEptcAtw,76
2
+ argusf/analysis/__init__.py,sha256=d_rL-fN7CkZDUI8maLm4BAXZYrPwUkLeUlvHVvETzsM,320
3
+ argusf/analysis/engine.py,sha256=onjVupURNHqNU4LTJdV_hD4VAstl37CInDEbniAQh2o,4090
4
+ argusf/analysis/rule.py,sha256=t1V-64mTWixKaUqzfqz6xhRCL5heOtU7PbLL_hFQSwo,1439
5
+ argusf/analysis/rules/__init__.py,sha256=6_PwhQr7zoT9swP8LE2MrYEYupVzSnF4pmiJooeHbpc,185
6
+ argusf/analysis/rules/documentation.py,sha256=TP5JDM3sEAF4qG7Sltt2sJTldEXL24Usoa3_CoB0do4,1080
7
+ argusf/analysis/rules/findings.py,sha256=SPpxo9v59yGyuRzGA5nivLk-d52PnhNgDx14kfiq_No,2083
8
+ argusf/analysis/rules/registry.py,sha256=wgP05PCrrCCZm0B92eJ0aydQXc1ohv4-4mvgqBdhi3E,601
9
+ argusf/analysis/rules/rulesets/__init__.py,sha256=DLocuwGzySb-imabzGvrrFN1_fWocZyTUYlswAmKvOA,105
10
+ argusf/analysis/rules/rulesets/rgus/__init__.py,sha256=_HXOmF73QhTssawlTAXTdidpzlCCBw2172g2SbC_-Lc,737
11
+ argusf/analysis/rules/rulesets/rgus/rgus001_no_goto.py,sha256=3dmJEAJDwgupC9l_25JUGXPh2zs6upXml31GBfZ-3Pg,1631
12
+ argusf/analysis/rules/rulesets/rgus/rgus002_common_block.py,sha256=dVp2ejSNrgMZyCSSTDU_oB0LiYlWb8uYsAnOi9IwBXU,1686
13
+ argusf/analysis/rules/rulesets/rgus/rgus003_equivalence.py,sha256=xgERnwd56iWLlh0OioBAekf4qXX870kc_M1JV4ucCc8,1872
14
+ argusf/analysis/rules/rulesets/rgus/rgus004_implicit_typing.py,sha256=0BEEQ6luTf-PXqNC-fg91DbeHMpMcRyu8nCE1WatdvI,5293
15
+ argusf/analysis/rules/rulesets/rgus/rgus005_arithmetic_if.py,sha256=I4hYPCnrbxle6dfKSzh-X6GC64uefEYoLmn3RVEkLwk,1896
16
+ argusf/analysis/rules/rulesets/rgus/rgus006_entry_statement.py,sha256=uw8E4Z1v1vOY5Sa8HGQL-3MTdCmwuBF0lrdiO9zVTXU,2108
17
+ argusf/analysis/rules/rulesets/rgus/rgus007_pause_statement.py,sha256=0exfcaoUj3ZotbYbmbzh4oGoeKS60jryrFG0Oqnqrx4,3623
18
+ argusf/analysis/rules/rulesets/rgus/rgus008_todo_comment.py,sha256=Z7KD0XOJWVXZZ3NOTfCBYUwlttUER_WJH_AzLvSJCg4,3429
19
+ argusf/analysis/rules/rulesets/rgus/rgus009_unsorted_use_statements.py,sha256=SO9QIxi9SWBRu3hrG3XCzgGf4hVaC1HYLX3PGG2SkDw,11128
20
+ argusf/analysis/rules/selection.py,sha256=RwMXz25jYyN99grT99YRsp2Z0JVuR_U-AGG1gN5QtFk,3082
21
+ argusf/analysis/suppression.py,sha256=WDAnboVyBcDmw38KRzt7Y6C38mUP03Lx-14Z9s2v6aE,4019
22
+ argusf/analysis/syntax_errors.py,sha256=mArEJOI0xSTMYKU7tjdfgoYBvV-DBuSoJo7iz6V2XdU,1323
23
+ argusf/autofix/__init__.py,sha256=P7FOQNpEP-2j94nXk7MrMzWC1KiDguueokdTNBcbSRI,692
24
+ argusf/autofix/applier.py,sha256=F8hyVwYQMIAIkzcH8twIrCYWSiawXe9wrdazbHyQJhY,5263
25
+ argusf/autofix/context.py,sha256=Ootx-6yxxLg1QvlaSNI2hc9PDIDXSFxQ1I4RB-duUCQ,2315
26
+ argusf/autofix/diff.py,sha256=rW5TFaoQ091WIIRN7yc-DZlPL_6W0jtJjh5NQW3qJlA,1184
27
+ argusf/autofix/edits.py,sha256=qNMbGnmBs_JtoHH8X__8qhyYSMXI0lyD9Mx41FYFdWM,1098
28
+ argusf/autofix/engine.py,sha256=Tt8a5n1VuGQhWgT1uAiXUEX9Pb6911mdKShVcM03QLg,8198
29
+ argusf/autofix/models.py,sha256=0puQmTVUSOjZLvXu1zpfOVM4h6O-ALW2ycWTZ8OZrog,1060
30
+ argusf/autofix/source.py,sha256=DJ0m6hX-4htVllIPRyY2N8c_hJ-ef3d3ZsaRTF17qhM,2511
31
+ argusf/autofix/writer.py,sha256=S4TtThJPbU4cNVEmVC1jWKXr48ztfr05b-Nf4902uc0,1552
32
+ argusf/cache/__init__.py,sha256=Pb1YFZ7-3aBu7ViwXZHf8dOMeAapP6gZXDXbPrR0ARc,128
33
+ argusf/cache/backend.py,sha256=1m81hvmJeb_Nn7dHNDzAH20YoTO23-c821RTerBypZY,10646
34
+ argusf/cli.py,sha256=dhXImGtuXHQXQVHUoKKOTJcP1BmowmqqI1V2QQbBApg,13883
35
+ argusf/config/__init__.py,sha256=6DwSuWj6CUuFaVc4boCrixOikf0EDWdYFj9D1a_kciY,56
36
+ argusf/config/config_resolver.py,sha256=B-x8NBPw2RyLrX5t1ZKfxU0W2O3vK6rwx4RKBMZ5kPc,9173
37
+ argusf/config/errors.py,sha256=QKmH3tNgBIi1lbDCKpFRGYtEv_tEmypRBGZX-MTJJK4,236
38
+ argusf/config/file_reader/__init__.py,sha256=C88-_bPeDBnJ8ZTg4kgNWmD41Q3NHDtjj_SUrngPoJs,85
39
+ argusf/config/file_reader/reader.py,sha256=TVxL-Ak_sxvGg1it38qJRC3FcRsLxkcq2vuQ9uf9AII,1725
40
+ argusf/config/models.py,sha256=ax8RK5TRLhLN-OEhjKMbRpwAg68jWajkrQDsKQGDePk,3932
41
+ argusf/config/validation.py,sha256=Nql5XCCZFjUG2zOvWQUHOc1v_NY5lvNT5t7Cc6UdQJo,4201
42
+ argusf/constants.py,sha256=kpDzwuhzv3zQrnE60eb3Zax5FiOjNFhl4iZmCmtLj_4,2308
43
+ argusf/diagnostics.py,sha256=0xB800-VkMNpNAoEbHrQT8TeGq4gpSOJ4upLOTeB8Cg,1287
44
+ argusf/discovery/__init__.py,sha256=tb_vqp6QDSqqsqSX3XR-ZqfxnpLR0vG9didQ4o3qfqo,110
45
+ argusf/discovery/backend.py,sha256=u6dXam57Vc9aipUjM9dtPLRcWPJWxJyRH-IcqMwhhKM,10224
46
+ argusf/discovery/gitignore.py,sha256=S8a9-2LKkDaVKlOXFBdpz6n2QwYBiGL0lgszbS8RzNQ,4859
47
+ argusf/discovery/repo.py,sha256=Tn_r7GzqWE6kWvsraq1rteYFUUg44uDnBK1BU1E8IAM,1053
48
+ argusf/hashing/__init__.py,sha256=vzjTusoaRsLh7rzwbk7KImkAMuSO1VoGAUEG1nSkJgk,117
49
+ argusf/hashing/hash.py,sha256=veaGDq2Fl7slDSXZn8EHfCw1_09iQ2krUG6dKFMshFo,1633
50
+ argusf/ir/__init__.py,sha256=eAGGyiPNAXOYhRbJlf2pMjFUyLCFuMgJWsEyc6sppMg,65
51
+ argusf/ir/models/__init__.py,sha256=tBiU3bKZzGNjACpeDPTpXSvGOMKy3m6UvUOq0hCdrRc,898
52
+ argusf/ir/models/findings.py,sha256=Q5tGCIROuIYWOvLQYTAV5vJNh8XqEppCKXJuwZhXFhs,2305
53
+ argusf/ir/models/source.py,sha256=NDyFRv85i4i8GfHSDDehrkG_Km64MWuXz1pKVt70-Uw,5524
54
+ argusf/orchestrator.py,sha256=4ICLS6N_TJUMJezSDcmJPSKH7b_or38jd2Qm9bZqdfs,5369
55
+ argusf/parser/__init__.py,sha256=LLYxmBhQ5xy81nK1YFPg5jgRrUc374vQRo2FD8Jvnlc,67
56
+ argusf/parser/backend.py,sha256=4iYQpgVIQ9CYuDgZQJKEyZfiZasarWnSszix1PMFJ64,677
57
+ argusf/parser/treesitter/__init__.py,sha256=7bwEd-IFML_psnT0GTuFhvmTxt1qJXYUVFfPTyB4uxI,56
58
+ argusf/parser/treesitter/backend.py,sha256=jyj0afoBH6lYBgDsCG9HOvcUAsPHg6mD9znV5_uAs2I,6431
59
+ argusf/parser/treesitter/walker/__init__.py,sha256=jcHpnh8XLMrqFkyx-ODiPeQKmkmO6TRBuxRyZsdarpg,265
60
+ argusf/parser/treesitter/walker/handlers.py,sha256=pEqaCYwZw_jZwZqYuTIZZsubYjlXsyEZVyPjGL9rw-o,8767
61
+ argusf/parser/treesitter/walker/walker.py,sha256=RZWXS5ItACL9mvwvdBkK4Zmjnwa0eB6vCZD9gnDj-fU,2412
62
+ argusf/registry/__init__.py,sha256=FDJIbZ-MJsLT_pb3ZRwzf7pN_r5UbpJQ1CFRkVZKe7A,107
63
+ argusf/registry/registry.py,sha256=bZuWkoZMSnWhpU2q85lFVYW3yJfD997P1KbDjNMlFKc,1957
64
+ argusf/reporting/__init__.py,sha256=Af51x84Ql-3dVevUV8NK1jWQK46wQHb6JoMa6Up6JqM,432
65
+ argusf/reporting/formatting.py,sha256=gKB6deMiI89jWodb-blJWi7vjf7-yfqfTc_Mm6i05mU,6123
66
+ argusf/reporting/registry.py,sha256=joL5lKo2liZSkiBe8wJ4fpy6KI33Wljpu-gljYUsZUs,498
67
+ argusf/reporting/reporters/__init__.py,sha256=nvCqTUZeCEOn-eFAubqJTWhaMITJsYFQI2_YzFz0q94,360
68
+ argusf/reporting/reporters/base.py,sha256=l9tgSi6EUdP3l3-ibRGiUcBNrdqmK3gCENeNwMY_tkY,977
69
+ argusf/reporting/reporters/concise.py,sha256=YJmDTnrjFCyP34OnTCui_DlUQ11DffFI9JSljxWig0M,1346
70
+ argusf/reporting/reporters/diff.py,sha256=W3FcR8sdiWpMqUbVGMW_OE1Dqk5NxR1UzKo_GQbceYE,1007
71
+ argusf/reporting/reporters/json.py,sha256=lX0nLQDnTrXE3JdqPvIjhE7yIA5SZTXJVjE6STMaQnw,2290
72
+ argusf/reporting/reporters/null.py,sha256=xTbAv20y0634n8Js8unCDWjiJu2DM3aC4SaZqH2CwcE,533
73
+ argusf/reporting/reporters/standard.py,sha256=5xsDEvnx5g9t0FJ87ijkfShr5W5HENCyTwYFamj_bAw,3083
74
+ argusf/reporting/reporters/statistics.py,sha256=LukAjvP5OPvl0qy6Q1ZNpJoAviLGM_nY4I9hLy0v37M,3728
75
+ argusf-0.1.0.dev0.dist-info/licenses/LICENSE,sha256=TDTIKMeGtwZRKoxrLVvTLehd3bCU1YDuD6BlNxAr7yI,1072
76
+ argusf-0.1.0.dev0.dist-info/WHEEL,sha256=bu7Cckf7DKpj8ztfOQHBiWtXM4xigujiTkrhvV6U2aU,81
77
+ argusf-0.1.0.dev0.dist-info/entry_points.txt,sha256=jLxN9qvSrBJuCs9WDFQSmS1iv-3TPSLhTXm48U6PoZI,43
78
+ argusf-0.1.0.dev0.dist-info/METADATA,sha256=VrB_frLoFvHrEV5cJS2HKQTCthyF3qEUnjLz90Y1rkU,8552
79
+ argusf-0.1.0.dev0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: uv 0.11.27
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ argusf = argusf.cli:cli
3
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Matthew McAteer
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.