lucidscan 0.5.12__py3-none-any.whl → 0.5.13__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.
@@ -33,7 +33,7 @@ def get_help_content() -> str:
33
33
  if docs_path.exists():
34
34
  return docs_path.read_text(encoding="utf-8")
35
35
 
36
- return "Help documentation not found. Visit https://github.com/voldeq/lucidscan"
36
+ return "Help documentation not found. Visit https://github.com/lucidscan/lucidscan"
37
37
 
38
38
 
39
39
  class HelpCommand(Command):
@@ -32,6 +32,12 @@ SEVERITY_MAP = {
32
32
  1: Severity.MEDIUM, # warning
33
33
  }
34
34
 
35
+ # Supported file extensions for ESLint
36
+ ESLINT_EXTENSIONS = {
37
+ ".js", ".jsx", ".mjs", ".cjs",
38
+ ".ts", ".tsx", ".mts", ".cts",
39
+ }
40
+
35
41
 
36
42
  class ESLintLinter(LinterPlugin):
37
43
  """ESLint linter plugin for JavaScript/TypeScript code analysis."""
@@ -135,8 +141,9 @@ class ESLintLinter(LinterPlugin):
135
141
  ]
136
142
 
137
143
  # Add paths to check - default to src if exists, otherwise current dir
144
+ # Filter to only include JS/TS files to avoid ESLint errors on unsupported files
138
145
  if context.paths:
139
- paths = [str(p) for p in context.paths]
146
+ paths = self._filter_paths(context.paths, context.project_root)
140
147
  else:
141
148
  src_dir = context.project_root / "src"
142
149
  if src_dir.exists():
@@ -144,6 +151,11 @@ class ESLintLinter(LinterPlugin):
144
151
  else:
145
152
  paths = ["."]
146
153
 
154
+ # If no valid paths after filtering, skip linting
155
+ if not paths:
156
+ LOGGER.debug("No JavaScript/TypeScript files to lint")
157
+ return []
158
+
147
159
  cmd.extend(paths)
148
160
 
149
161
  # Add ignore patterns
@@ -200,7 +212,7 @@ class ESLintLinter(LinterPlugin):
200
212
  ]
201
213
 
202
214
  if context.paths:
203
- paths = [str(p) for p in context.paths]
215
+ paths = self._filter_paths(context.paths, context.project_root)
204
216
  else:
205
217
  src_dir = context.project_root / "src"
206
218
  if src_dir.exists():
@@ -208,6 +220,11 @@ class ESLintLinter(LinterPlugin):
208
220
  else:
209
221
  paths = ["."]
210
222
 
223
+ # If no valid paths after filtering, skip fix
224
+ if not paths:
225
+ LOGGER.debug("No JavaScript/TypeScript files to fix")
226
+ return FixResult()
227
+
211
228
  cmd.extend(paths)
212
229
 
213
230
  exclude_patterns = context.get_exclude_patterns()
@@ -247,6 +264,35 @@ class ESLintLinter(LinterPlugin):
247
264
  issues_remaining=len(post_issues),
248
265
  )
249
266
 
267
+ def _filter_paths(
268
+ self,
269
+ paths: List[Path],
270
+ project_root: Path,
271
+ ) -> List[str]:
272
+ """Filter paths to only include JS/TS files.
273
+
274
+ Directories are passed through as-is (ESLint will handle them).
275
+ Files are filtered to only include supported extensions.
276
+
277
+ Args:
278
+ paths: List of paths to filter.
279
+ project_root: Project root directory.
280
+
281
+ Returns:
282
+ List of filtered path strings.
283
+ """
284
+ filtered = []
285
+ for path in paths:
286
+ if path.is_dir():
287
+ # Directories are passed through - ESLint handles file discovery
288
+ filtered.append(str(path))
289
+ elif path.suffix.lower() in ESLINT_EXTENSIONS:
290
+ # Only include files with supported extensions
291
+ filtered.append(str(path))
292
+ else:
293
+ LOGGER.debug(f"Skipping non-JS/TS file: {path}")
294
+ return filtered
295
+
250
296
  def _parse_output(self, output: str, project_root: Path) -> List[UnifiedIssue]:
251
297
  """Parse ESLint JSON output.
252
298
 
@@ -19,7 +19,7 @@ SARIF_SCHEMA = "https://json.schemastore.org/sarif-2.1.0.json"
19
19
  SARIF_VERSION = "2.1.0"
20
20
 
21
21
  # Project information
22
- LUCIDSCAN_INFO_URI = "https://github.com/voldeq/lucidscan"
22
+ LUCIDSCAN_INFO_URI = "https://github.com/lucidscan/lucidscan"
23
23
 
24
24
  # Severity mapping to SARIF security-severity (CVSS-aligned 0.0-10.0)
25
25
  # and level (error, warning, note)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lucidscan
3
- Version: 0.5.12
3
+ Version: 0.5.13
4
4
  Summary: LucidScan - The trust layer for AI-assisted development
5
5
  Author-email: Voldeq GmbH <toni.antunovic@voldeq.com>
6
6
  License: Apache-2.0
@@ -41,11 +41,11 @@ Dynamic: license-file
41
41
 
42
42
  # LucidScan
43
43
 
44
- [![CI](https://github.com/voldeq/lucidscan/actions/workflows/ci.yml/badge.svg)](https://github.com/voldeq/lucidscan/actions/workflows/ci.yml)
45
- [![codecov](https://codecov.io/gh/voldeq/lucidscan/graph/badge.svg)](https://codecov.io/gh/voldeq/lucidscan)
44
+ [![CI](https://github.com/lucidscan/lucidscan/actions/workflows/ci.yml/badge.svg)](https://github.com/lucidscan/lucidscan/actions/workflows/ci.yml)
45
+ [![codecov](https://codecov.io/gh/lucidscan/lucidscan/graph/badge.svg)](https://codecov.io/gh/lucidscan/lucidscan)
46
46
  [![PyPI version](https://img.shields.io/pypi/v/lucidscan)](https://pypi.org/project/lucidscan/)
47
47
  [![Python](https://img.shields.io/pypi/pyversions/lucidscan)](https://pypi.org/project/lucidscan/)
48
- [![License](https://img.shields.io/github/license/voldeq/lucidscan)](https://github.com/voldeq/lucidscan/blob/main/LICENSE)
48
+ [![License](https://img.shields.io/github/license/lucidscan/lucidscan)](https://github.com/lucidscan/lucidscan/blob/main/LICENSE)
49
49
 
50
50
  **The trust layer for AI-assisted development.**
51
51
 
@@ -225,7 +225,7 @@ lucidscan status [--tools]
225
225
  ## Development
226
226
 
227
227
  ```bash
228
- git clone https://github.com/voldeq/lucidscan.git
228
+ git clone https://github.com/lucidscan/lucidscan.git
229
229
  cd lucidscan
230
230
  pip install -e ".[dev]"
231
231
  pytest tests/
@@ -12,7 +12,7 @@ lucidscan/cli/exit_codes.py,sha256=AFj5P8mvXF5epcQBEVlUxNjc-XWjx1arLi0uPWnhbzc,4
12
12
  lucidscan/cli/runner.py,sha256=fZXDkYB39S0yC6Eg4MNqxQaPxfib8iusPLHe-h_0flg,8907
13
13
  lucidscan/cli/commands/__init__.py,sha256=uJyTlzRMol6hLWG4blb3MGCJqJlFPMqWVHQK7FSEDEo,1665
14
14
  lucidscan/cli/commands/autoconfigure.py,sha256=vpdQ6WH_uHSzEDbkyp41ZkUrcMWS2RV-C4SOqxrMP7k,9864
15
- lucidscan/cli/commands/help.py,sha256=wmlw_4OEft02h-j06lAm1Qggft2cqMK1rPUXC3SPNpY,1941
15
+ lucidscan/cli/commands/help.py,sha256=3BWWf4RftjnBZX1vZ1u9vz5MntuKmFp7pdmUyNgYubQ,1944
16
16
  lucidscan/cli/commands/init.py,sha256=ZkwE-zw8qR1TfBuk5SCVzfOSwuL6dX29SgQ3hwLoZkM,21403
17
17
  lucidscan/cli/commands/list_scanners.py,sha256=QUtNDOZSU-cWdGOD6TIRiFNqnNwyZ2bXOxXFwbUl4wQ,1885
18
18
  lucidscan/cli/commands/scan.py,sha256=SUAVXCDlM3BWdb7m6Jlqe1u8B2ygwCzP2yyqt-lYdBM,11500
@@ -59,12 +59,12 @@ lucidscan/plugins/linters/__init__.py,sha256=ptAjbOSi7tOenMdUI4QBgA_bGmSrw25Pi_2
59
59
  lucidscan/plugins/linters/base.py,sha256=JHEG4z3uJNAGW2Fxk-Y7PbN8lvJMeG0Axdjv19aEntg,3258
60
60
  lucidscan/plugins/linters/biome.py,sha256=k411irgzDDB5tI9iuiQHy7KZ4vC6znLOs4NCkAk1Gx4,13651
61
61
  lucidscan/plugins/linters/checkstyle.py,sha256=zL53zI6CaBgEV1MP3PAvPbXzEq_rdnELmVT-c8fiT4Q,11964
62
- lucidscan/plugins/linters/eslint.py,sha256=PMjmbhgZVCot21jULS9Xlz6K0A-v4mVrjcl_a9l3dpA,10630
62
+ lucidscan/plugins/linters/eslint.py,sha256=l5tiDroo7JWUKUmTkOGSUfS2im-GNeRD5rnSjNWuAiM,12206
63
63
  lucidscan/plugins/linters/ruff.py,sha256=rgI_zS7qJBYtSSfHDgx9rE0D1tzvioxJWq-S9UY0qqc,16072
64
64
  lucidscan/plugins/reporters/__init__.py,sha256=0KbwN9xTvlG_XSByn9zzuCUudhh5N-VPufSF7BEnwtQ,1459
65
65
  lucidscan/plugins/reporters/base.py,sha256=zLhOl5VnlWuMBSoVNxm1kuJObj7vxhU1qLRuC0G4Qto,828
66
66
  lucidscan/plugins/reporters/json_reporter.py,sha256=KxKfVvOlcom1UWxRTYP3AyYX8-aM0dU0tFsFFH5dKBU,2685
67
- lucidscan/plugins/reporters/sarif_reporter.py,sha256=hg4TU1rBRijDHMYk3htLrua9nzmbEOZvGEz54Ipoxtw,9748
67
+ lucidscan/plugins/reporters/sarif_reporter.py,sha256=dCaQdVeDixLg2wcIqF07M9a-yq60W6c0MBkL2CWx4Us,9751
68
68
  lucidscan/plugins/reporters/summary_reporter.py,sha256=BNUyYpQfcF9e5gb8H68ppZDEfxHAfMkEAgUdcLYGKGI,1986
69
69
  lucidscan/plugins/reporters/table_reporter.py,sha256=L8gtiNBCkBbJGTMcf-d87lYinM4Iuuc5yHr8ayDsJio,2601
70
70
  lucidscan/plugins/scanners/__init__.py,sha256=Eq_KFR9ZILBj-yUpInDmIHOiMhf2ZwTVWrQMyAGF0FU,1782
@@ -83,9 +83,9 @@ lucidscan/plugins/type_checkers/base.py,sha256=ILH6ZqEb1eErkdXK-tlqiBBatU3cwgD2S
83
83
  lucidscan/plugins/type_checkers/mypy.py,sha256=CTMo7y-ZHqylb07zd9ywWkVyd4xFCYAMFsD2JIEStuk,10693
84
84
  lucidscan/plugins/type_checkers/pyright.py,sha256=f9dxFMA2pBEKOsBbw-IDamyt17aqsaHWWmk_wQZv_VQ,9421
85
85
  lucidscan/plugins/type_checkers/typescript.py,sha256=zA_gvosk-yfVzWG9c2nK4cJY2F_wk7U-1u704K1qieE,8170
86
- lucidscan-0.5.12.dist-info/licenses/LICENSE,sha256=Rk8TkW9DoGbCku6y8YG2-MxCAT9mqaqQNZNZhVsaTZ8,11366
87
- lucidscan-0.5.12.dist-info/METADATA,sha256=orQy9ZlkK4dGlUBDlWEVII5reZINNIcUJ3HxtjixtJg,6940
88
- lucidscan-0.5.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
89
- lucidscan-0.5.12.dist-info/entry_points.txt,sha256=lB4VthB8R9YidwDx5r9ZCxCamG9yAR9_Ph1BOPzdWtk,1423
90
- lucidscan-0.5.12.dist-info/top_level.txt,sha256=6p83YY3SjOWWLzeG9FRP2WNMSGJH8WzduSFwwIT1g_0,10
91
- lucidscan-0.5.12.dist-info/RECORD,,
86
+ lucidscan-0.5.13.dist-info/licenses/LICENSE,sha256=Rk8TkW9DoGbCku6y8YG2-MxCAT9mqaqQNZNZhVsaTZ8,11366
87
+ lucidscan-0.5.13.dist-info/METADATA,sha256=iyv_Q2oWzV_cscLdlmZZNbI1eafpg3t56A7hPOEIqfA,6961
88
+ lucidscan-0.5.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
89
+ lucidscan-0.5.13.dist-info/entry_points.txt,sha256=lB4VthB8R9YidwDx5r9ZCxCamG9yAR9_Ph1BOPzdWtk,1423
90
+ lucidscan-0.5.13.dist-info/top_level.txt,sha256=6p83YY3SjOWWLzeG9FRP2WNMSGJH8WzduSFwwIT1g_0,10
91
+ lucidscan-0.5.13.dist-info/RECORD,,