sourcecode 2.5.17__py3-none-any.whl → 2.5.19__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.
- sourcecode/__init__.py +1 -1
- sourcecode/repository_ir.py +14 -4
- sourcecode/validation_inference.py +94 -24
- sourcecode/validation_surface.py +128 -0
- {sourcecode-2.5.17.dist-info → sourcecode-2.5.19.dist-info}/METADATA +1 -1
- {sourcecode-2.5.17.dist-info → sourcecode-2.5.19.dist-info}/RECORD +9 -9
- {sourcecode-2.5.17.dist-info → sourcecode-2.5.19.dist-info}/WHEEL +0 -0
- {sourcecode-2.5.17.dist-info → sourcecode-2.5.19.dist-info}/entry_points.txt +0 -0
- {sourcecode-2.5.17.dist-info → sourcecode-2.5.19.dist-info}/licenses/LICENSE +0 -0
sourcecode/__init__.py
CHANGED
sourcecode/repository_ir.py
CHANGED
|
@@ -2475,10 +2475,20 @@ def _scan_guard_clauses(body: str) -> list[dict]:
|
|
|
2475
2475
|
|
|
2476
2476
|
|
|
2477
2477
|
def _extract_guard_facts(symbols: list[SymbolRecord], source: str) -> dict[str, list[dict]]:
|
|
2478
|
-
"""Ordered `guard_clause` atoms per method/constructor FQN. Reuses the
|
|
2479
|
-
`_method_body` extraction as the other body facts; the scanner keeps only
|
|
2480
|
-
structural guard shape (β), on its own occurrence axis.
|
|
2481
|
-
|
|
2478
|
+
"""Ordered `guard_clause` atoms per method/constructor/endpoint FQN. Reuses the
|
|
2479
|
+
SAME `_method_body` extraction as the other body facts; the scanner keeps only
|
|
2480
|
+
the structural guard shape (β), on its own occurrence axis.
|
|
2481
|
+
|
|
2482
|
+
Endpoint-kind bodies are included (F2): an annotation-classified handler
|
|
2483
|
+
(`@PostMapping …`, symbol_kind="endpoint") is still a method body, and a guard
|
|
2484
|
+
that throws on a bad request parameter (`if (x == null || x.isBlank()) throw`)
|
|
2485
|
+
is exactly the manual-validation shape the validation surface must see. The
|
|
2486
|
+
scope was previously method/constructor only, which silently dropped every
|
|
2487
|
+
guard living in a handler body — the atom exists, the coverage did not."""
|
|
2488
|
+
callers = [
|
|
2489
|
+
s for s in symbols
|
|
2490
|
+
if s.symbol_kind in ("method", "constructor", "endpoint") and s.line
|
|
2491
|
+
]
|
|
2482
2492
|
if not callers:
|
|
2483
2493
|
return {}
|
|
2484
2494
|
raw_lines = source.splitlines()
|
|
@@ -15,20 +15,23 @@ VAI note (§0.5): the only names this module keys on are **published open
|
|
|
15
15
|
standards** (`jakarta.validation`, `javax.validation`, the bean-validation
|
|
16
16
|
annotation vocabulary). No client / convention name enters a predicate.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Design §2
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
manual_validation (design §2) — RESOLVED (F2, roadmap Engineering Decision Support)
|
|
19
|
+
-----------------------------------------------------------------------------------
|
|
20
|
+
Design §2 asks for a `manual_validation` class detected by the **β GuardClause**
|
|
21
|
+
shape on handler bodies (a guard that throws/returns on a bad parameter). This was
|
|
22
|
+
previously deferred because `_extract_guard_facts` scanned only
|
|
23
|
+
`symbol_kind in {"method","constructor"}` and a mapped handler surfaces as kind
|
|
24
|
+
`"endpoint"`, so `guard_facts` was empty for every handler body (EPV/INV-2: build
|
|
25
|
+
the endpoint-scoped guard capability only when this consumer is ratified).
|
|
26
|
+
|
|
27
|
+
Roadmap F2 ratifies the consumer. `_extract_guard_facts` now includes endpoint-kind
|
|
28
|
+
bodies (repository_ir.py) — the SAME β scan widened to a symbol_kind it silently
|
|
29
|
+
skipped, no new atom type — so a handler's entry guards are visible here. This
|
|
30
|
+
module now classifies `manual_validation` from those atoms, scoped to
|
|
31
|
+
null/empty-check guards (β's `other` test_kind lumps range checks with
|
|
32
|
+
non-validation guards like memoization/preconditions, so counting it would inflate
|
|
33
|
+
false positives; range validation is therefore not separately claimed — an honest
|
|
34
|
+
under-report, labelled Likely never Verified).
|
|
32
35
|
"""
|
|
33
36
|
from __future__ import annotations
|
|
34
37
|
|
|
@@ -64,6 +67,30 @@ _VALIDATE_MARKERS: frozenset[str] = frozenset({"Valid", "Validated"})
|
|
|
64
67
|
# Body-carrying HTTP verbs — the surface where request-body validation applies.
|
|
65
68
|
_BODY_VERBS: frozenset[str] = frozenset({"POST", "PUT", "PATCH"})
|
|
66
69
|
|
|
70
|
+
# β GuardClause test kinds that read as manual input validation (F2). `other`
|
|
71
|
+
# is excluded on purpose: at β it lumps range checks with non-validation guards
|
|
72
|
+
# (memoization, preconditions), so it cannot be claimed as validation.
|
|
73
|
+
_MANUAL_GUARD_TESTS: frozenset[str] = frozenset({"null_check", "empty_check"})
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _manual_guarded_handlers(
|
|
77
|
+
cir: "CanonicalRepositoryIR", handler_symbols: "set[str]"
|
|
78
|
+
) -> set[str]:
|
|
79
|
+
"""Handler symbols carrying ≥1 null/empty β GuardClause that early-exits.
|
|
80
|
+
|
|
81
|
+
Every β atom already early-exits (return/throw — `_scan_guard_clauses` records
|
|
82
|
+
no other shape), so presence of a null/empty atom on a handler body IS the
|
|
83
|
+
manual-validation signal. Scoped to the handlers actually on the body surface
|
|
84
|
+
so a guard in an unrelated method never counts."""
|
|
85
|
+
gf = cir.guard_facts
|
|
86
|
+
out: set[str] = set()
|
|
87
|
+
for h in handler_symbols:
|
|
88
|
+
for atom in gf.get(h, ()) or ():
|
|
89
|
+
if atom.get("test_kind") in _MANUAL_GUARD_TESTS:
|
|
90
|
+
out.add(h)
|
|
91
|
+
break
|
|
92
|
+
return out
|
|
93
|
+
|
|
67
94
|
|
|
68
95
|
def _validation_available(cir: "CanonicalRepositoryIR") -> tuple[bool, list[str]]:
|
|
69
96
|
"""True when a published bean-validation framework is on the classpath,
|
|
@@ -133,10 +160,11 @@ def infer_validation_pattern(cir: "CanonicalRepositoryIR") -> ValidationInferenc
|
|
|
133
160
|
|
|
134
161
|
Repo-level class (DESIGN §2):
|
|
135
162
|
- ``bean_validation_active`` — @Valid present on body handlers.
|
|
163
|
+
- ``manual_validation`` — no @Valid, but body handlers guard
|
|
164
|
+
their input with null/empty β guard clauses that early-exit (Likely).
|
|
136
165
|
- ``bean_validation_available_unused`` — validation on the classpath and
|
|
137
166
|
body endpoints exist, but no handler validates → risk (Likely).
|
|
138
167
|
- ``no_validation_detected`` — none of the above (Unknown).
|
|
139
|
-
(``manual_validation`` deferred — see module docstring.)
|
|
140
168
|
|
|
141
169
|
Never raises.
|
|
142
170
|
"""
|
|
@@ -145,15 +173,30 @@ def infer_validation_pattern(cir: "CanonicalRepositoryIR") -> ValidationInferenc
|
|
|
145
173
|
|
|
146
174
|
body_eps = [ep for ep in cir.endpoints if str(ep.method).upper() in _BODY_VERBS]
|
|
147
175
|
body_total = len(body_eps)
|
|
176
|
+
body_handlers = {ep.handler_symbol for ep in body_eps}
|
|
177
|
+
manual_handlers = _manual_guarded_handlers(cir, body_handlers)
|
|
148
178
|
validated_body = sum(1 for ep in body_eps if ep.handler_symbol in validated_handlers)
|
|
179
|
+
# manual guards only "count" where bean validation is absent — a handler that
|
|
180
|
+
# both @Valid-s and hand-guards is bean-validated, not manual.
|
|
181
|
+
manual_body = sum(
|
|
182
|
+
1 for ep in body_eps
|
|
183
|
+
if ep.handler_symbol in manual_handlers
|
|
184
|
+
and ep.handler_symbol not in validated_handlers
|
|
185
|
+
)
|
|
149
186
|
unvalidated_body = body_total - validated_body
|
|
150
187
|
|
|
151
188
|
# per-endpoint findings (only the body surface — where a request body applies)
|
|
152
189
|
endpoint_findings: list[dict] = []
|
|
153
|
-
rollup = {
|
|
190
|
+
rollup = {
|
|
191
|
+
"validated": 0, "manual_guard": 0,
|
|
192
|
+
"available_unused": 0, "unvalidated_unknown": 0,
|
|
193
|
+
}
|
|
154
194
|
for ep in body_eps:
|
|
155
195
|
if ep.handler_symbol in validated_handlers:
|
|
156
196
|
klass, conf = "validated", Confidence.VERIFIED
|
|
197
|
+
elif ep.handler_symbol in manual_handlers:
|
|
198
|
+
# hand-written null/empty guard on the handler body → manual validation
|
|
199
|
+
klass, conf = "manual_guard", Confidence.LIKELY
|
|
157
200
|
elif available:
|
|
158
201
|
# @RequestBody-shaped verb, framework available, no @Valid → gap
|
|
159
202
|
klass, conf = "available_unused", Confidence.LIKELY
|
|
@@ -175,11 +218,11 @@ def infer_validation_pattern(cir: "CanonicalRepositoryIR") -> ValidationInferenc
|
|
|
175
218
|
"the exact @RequestBody parameter count is not captured (no IR atom "
|
|
176
219
|
"exposes it), so 'available_unused' may include body-less handlers."
|
|
177
220
|
)
|
|
178
|
-
|
|
179
|
-
"manual_validation
|
|
180
|
-
"
|
|
181
|
-
"
|
|
182
|
-
"
|
|
221
|
+
manual_range_fn = (
|
|
222
|
+
"manual_validation is detected from null/empty β guard clauses only; "
|
|
223
|
+
"range/other-shaped guards (e.g. `if (n < 0) throw`) are indistinguishable "
|
|
224
|
+
"at β from non-validation guards and are not counted, so a purely "
|
|
225
|
+
"range-guarded handler can under-report."
|
|
183
226
|
)
|
|
184
227
|
|
|
185
228
|
if validated_body > 0:
|
|
@@ -193,11 +236,38 @@ def infer_validation_pattern(cir: "CanonicalRepositoryIR") -> ValidationInferenc
|
|
|
193
236
|
"validated_body_endpoints": validated_body,
|
|
194
237
|
"body_endpoints": body_total,
|
|
195
238
|
"unvalidated_body_endpoints": unvalidated_body,
|
|
239
|
+
"manual_guarded_body_endpoints": manual_body,
|
|
196
240
|
"validation_available": available,
|
|
197
241
|
},
|
|
198
242
|
),
|
|
199
243
|
limitations=[common_limitation],
|
|
200
|
-
fn_causes=[
|
|
244
|
+
fn_causes=[manual_range_fn],
|
|
245
|
+
)
|
|
246
|
+
elif manual_body > 0:
|
|
247
|
+
pattern = "manual_validation"
|
|
248
|
+
verdict = Verdict(
|
|
249
|
+
claim="Request bodies validated by hand-written guard clauses (no bean validation)",
|
|
250
|
+
confidence=Confidence.LIKELY,
|
|
251
|
+
evidence=Evidence(
|
|
252
|
+
atoms_used=[f"null/empty guard: {h}" for h in sorted(manual_handlers)][:50],
|
|
253
|
+
details={
|
|
254
|
+
"body_endpoints": body_total,
|
|
255
|
+
"manual_guarded_body_endpoints": manual_body,
|
|
256
|
+
"validated_body_endpoints": 0,
|
|
257
|
+
"validation_available": available,
|
|
258
|
+
},
|
|
259
|
+
),
|
|
260
|
+
limitations=[
|
|
261
|
+
common_limitation,
|
|
262
|
+
"A null/empty guard is a likely input-validation signal, not a "
|
|
263
|
+
"proof — it could defend an internal invariant unrelated to the "
|
|
264
|
+
"request contract.",
|
|
265
|
+
],
|
|
266
|
+
fp_causes=[
|
|
267
|
+
"A null/empty guard may protect against an internal null rather "
|
|
268
|
+
"than validate the request body.",
|
|
269
|
+
],
|
|
270
|
+
fn_causes=[manual_range_fn],
|
|
201
271
|
)
|
|
202
272
|
elif available and body_total > 0:
|
|
203
273
|
pattern = "bean_validation_available_unused"
|
|
@@ -222,7 +292,7 @@ def infer_validation_pattern(cir: "CanonicalRepositoryIR") -> ValidationInferenc
|
|
|
222
292
|
"A body endpoint may be intentionally unvalidated (idempotent "
|
|
223
293
|
"echo, internal-only), or validated manually.",
|
|
224
294
|
],
|
|
225
|
-
fn_causes=[
|
|
295
|
+
fn_causes=[manual_range_fn],
|
|
226
296
|
)
|
|
227
297
|
else:
|
|
228
298
|
pattern = "no_validation_detected"
|
|
@@ -238,7 +308,7 @@ def infer_validation_pattern(cir: "CanonicalRepositoryIR") -> ValidationInferenc
|
|
|
238
308
|
"validation import, and no body endpoints, or validation is done "
|
|
239
309
|
"by a mechanism this projection does not model.",
|
|
240
310
|
],
|
|
241
|
-
fn_causes=[
|
|
311
|
+
fn_causes=[manual_range_fn],
|
|
242
312
|
)
|
|
243
313
|
|
|
244
314
|
return ValidationInferenceResult(
|
sourcecode/validation_surface.py
CHANGED
|
@@ -363,6 +363,98 @@ def _recover_source_endpoints(
|
|
|
363
363
|
return routes, total
|
|
364
364
|
|
|
365
365
|
|
|
366
|
+
def _recover_spec_endpoints(
|
|
367
|
+
root: Path,
|
|
368
|
+
existing_keys: "set[tuple[Any, Any]]",
|
|
369
|
+
catalog: "dict[str, Any]",
|
|
370
|
+
custom_used: "set[str]",
|
|
371
|
+
) -> "tuple[Optional[str], list[dict[str, Any]], int]":
|
|
372
|
+
"""Recover validation routes from a standalone OpenAPI spec on disk.
|
|
373
|
+
|
|
374
|
+
F1: ``extract_java_endpoints`` only links a spec when an openapi-generator
|
|
375
|
+
interface-controller (``@RestController implements XxxApi``) matches it. A
|
|
376
|
+
repo that ships a plain ``openapi.yml`` with no such controller therefore
|
|
377
|
+
reported "No OpenAPI spec found" — a confirmed false negative. This consults
|
|
378
|
+
the existing :func:`build_openapi_surface` producer directly so a discovered
|
|
379
|
+
spec's body operations contribute their declared constraints and flip the
|
|
380
|
+
"no spec" claim.
|
|
381
|
+
|
|
382
|
+
Returns ``(spec_path, routes, validated_field_count)``; ``spec_path`` is None
|
|
383
|
+
when no parseable spec with operations is present.
|
|
384
|
+
"""
|
|
385
|
+
from sourcecode.openapi_surface import build_openapi_surface
|
|
386
|
+
|
|
387
|
+
surface = build_openapi_surface(root)
|
|
388
|
+
if surface is None or not surface.operations:
|
|
389
|
+
return None, [], 0
|
|
390
|
+
|
|
391
|
+
routes: "list[dict[str, Any]]" = []
|
|
392
|
+
total = 0
|
|
393
|
+
for op in surface.operations:
|
|
394
|
+
if str(op.method).upper() not in ("POST", "PUT", "PATCH"):
|
|
395
|
+
continue
|
|
396
|
+
key = (op.method, op.path)
|
|
397
|
+
if key in existing_keys:
|
|
398
|
+
continue # already surfaced from source — dedupe by method+path
|
|
399
|
+
schema = surface.schemas.get(op.request_body_schema) if op.request_body_schema else None
|
|
400
|
+
constraints = [f.to_dict() for f in schema.fields] if schema is not None else []
|
|
401
|
+
validated = _validated_fields_from_constraints(constraints, catalog, custom_used)
|
|
402
|
+
total += len(validated)
|
|
403
|
+
route: "dict[str, Any]" = {
|
|
404
|
+
"method": op.method,
|
|
405
|
+
"path": op.path,
|
|
406
|
+
"controller": None,
|
|
407
|
+
"handler": op.operation_id or "(operation)",
|
|
408
|
+
"schema": op.request_body_schema,
|
|
409
|
+
"source": "openapi-spec",
|
|
410
|
+
"confidence": "high",
|
|
411
|
+
"validatedFields": validated,
|
|
412
|
+
}
|
|
413
|
+
routes.append(route)
|
|
414
|
+
existing_keys.add(key)
|
|
415
|
+
return surface.spec_path, routes, total
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
def _validated_fields_from_constraints(
|
|
419
|
+
constraints: "list[Any]",
|
|
420
|
+
catalog: "dict[str, Any]",
|
|
421
|
+
custom_used: "set[str]",
|
|
422
|
+
) -> "list[dict[str, Any]]":
|
|
423
|
+
"""Render a schema's constraint dicts into ``validatedFields`` entries.
|
|
424
|
+
|
|
425
|
+
Mirrors the built-in-rule + custom-validator linkage the main loop applies to
|
|
426
|
+
OpenAPI request bodies; shared so the standalone-spec path (F1) stays byte-
|
|
427
|
+
consistent with the interface-controller path."""
|
|
428
|
+
out: "list[dict[str, Any]]" = []
|
|
429
|
+
for fc in constraints:
|
|
430
|
+
if not isinstance(fc, dict):
|
|
431
|
+
continue
|
|
432
|
+
rules = _field_rules(fc)
|
|
433
|
+
customs: "list[dict[str, Any]]" = []
|
|
434
|
+
for ann in fc.get("extraAnnotations", []) or []:
|
|
435
|
+
cc = catalog.get(ann)
|
|
436
|
+
entry: "dict[str, Any]" = {"annotation": ann}
|
|
437
|
+
if cc is not None:
|
|
438
|
+
custom_used.add(ann)
|
|
439
|
+
if cc.validators:
|
|
440
|
+
entry["validators"] = cc.validators
|
|
441
|
+
if cc.message is not None:
|
|
442
|
+
entry["message"] = cc.message
|
|
443
|
+
entry["resolved"] = True
|
|
444
|
+
else:
|
|
445
|
+
entry["resolved"] = False
|
|
446
|
+
customs.append(entry)
|
|
447
|
+
if not rules and not customs:
|
|
448
|
+
continue
|
|
449
|
+
field_entry: "dict[str, Any]" = {"name": fc.get("name")}
|
|
450
|
+
if rules:
|
|
451
|
+
field_entry["rules"] = rules
|
|
452
|
+
if customs:
|
|
453
|
+
field_entry["customValidators"] = customs
|
|
454
|
+
out.append(field_entry)
|
|
455
|
+
return out
|
|
456
|
+
|
|
457
|
+
|
|
366
458
|
def _field_rules(fieldc: "dict[str, Any]") -> "list[dict[str, Any]]":
|
|
367
459
|
"""Render a constraint dict's built-in rules as a list of {kind, value}."""
|
|
368
460
|
rules: "list[dict[str, Any]]" = []
|
|
@@ -491,6 +583,36 @@ def build_validation_surface(
|
|
|
491
583
|
if spec_path:
|
|
492
584
|
result["openapi_spec"] = spec_path
|
|
493
585
|
else:
|
|
586
|
+
# No spec linked by extract_java_endpoints (no openapi-generator
|
|
587
|
+
# interface-controller matched). F1: consult the standalone-spec
|
|
588
|
+
# producer directly — a plain openapi.yml shipped in the repo is a real
|
|
589
|
+
# spec, so its body operations contribute constraints and flip the
|
|
590
|
+
# "no spec found" claim instead of reporting a false negative.
|
|
591
|
+
existing_keys = {(r.get("method"), r.get("path")) for r in out_endpoints}
|
|
592
|
+
spec_path2, spec_routes, spec_fields = _recover_spec_endpoints(
|
|
593
|
+
root, existing_keys, catalog, custom_used
|
|
594
|
+
)
|
|
595
|
+
if spec_path2 is not None:
|
|
596
|
+
result["openapi_spec"] = spec_path2
|
|
597
|
+
out_endpoints.extend(spec_routes)
|
|
598
|
+
total_validated_fields += spec_fields
|
|
599
|
+
spec_keys = {(r.get("method"), r.get("path")) for r in spec_routes}
|
|
600
|
+
gaps = [g for g in gaps if (g.get("method"), g.get("path")) not in spec_keys]
|
|
601
|
+
result["endpoints"] = out_endpoints
|
|
602
|
+
result["gaps"] = gaps
|
|
603
|
+
result["custom_validators"] = [catalog[k].to_dict() for k in sorted(catalog)]
|
|
604
|
+
result["summary"]["endpoints_with_body"] = len(out_endpoints)
|
|
605
|
+
result["summary"]["validated_fields"] = total_validated_fields
|
|
606
|
+
result["summary"]["custom_validators_linked"] = len(custom_used)
|
|
607
|
+
result["summary"]["gaps"] = len(gaps)
|
|
608
|
+
result["summary"]["spec_derived_routes"] = len(spec_routes)
|
|
609
|
+
result["note"] = (
|
|
610
|
+
"OpenAPI spec discovered on disk (standalone, not linked to a "
|
|
611
|
+
"generated interface-controller); body operations contributed "
|
|
612
|
+
"their declared constraints. Response shapes and non-body "
|
|
613
|
+
"operations are not modeled here."
|
|
614
|
+
)
|
|
615
|
+
return result
|
|
494
616
|
# No OpenAPI spec on disk / under target/generated-sources. Recover
|
|
495
617
|
# declarative constraints from the graph's DTO field nodes (bean-
|
|
496
618
|
# validation annotations on @Valid/@Validated handler bodies), so a
|
|
@@ -525,6 +647,12 @@ def build_validation_surface(
|
|
|
525
647
|
"partial; OpenAPI-carried constraints would be more complete."
|
|
526
648
|
)
|
|
527
649
|
else:
|
|
650
|
+
# Genuine absence — no spec on disk AND no in-repo DTO constraints.
|
|
651
|
+
# Emit a machine-readable zero_result_reason (F1) so a consumer can
|
|
652
|
+
# tell "we looked and found nothing" from "we did not look": an empty
|
|
653
|
+
# surface here is an attested negative, not a missing-validation
|
|
654
|
+
# finding.
|
|
655
|
+
result["zero_result_reason"] = "no_openapi_spec_and_no_source_dto_constraints"
|
|
528
656
|
result["note"] = (
|
|
529
657
|
"No OpenAPI spec found and no source DTO constraints recovered "
|
|
530
658
|
"(no handler validates an in-repo DTO via @Valid/@Validated, or "
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
sourcecode/__init__.py,sha256=
|
|
1
|
+
sourcecode/__init__.py,sha256=lv_mMr5Y5s1U1_CJa-6pkjbnlCz4lXMFrxs9SHb4qJs,309
|
|
2
2
|
sourcecode/adaptive_scanner.py,sha256=yJBKjNpkY6bpueYJ2YnRezen3sYZDecEt7WaaNWdqug,9466
|
|
3
3
|
sourcecode/archetype.py,sha256=d7yoN6Tj4OBj-VgSMPEKg4WF9H8FypnZ5A6AkUh5oIE,34484
|
|
4
4
|
sourcecode/architecture_analyzer.py,sha256=GFc4ek-s1IHWM7pl-0L32WahZ93AmDgrAMcOuBKA5Dk,61463
|
|
@@ -57,7 +57,7 @@ sourcecode/redactor.py,sha256=SB4hwIvg8h-hvcqKcDWaZvA-aSyn-at-BIRwa0tUv5E,3227
|
|
|
57
57
|
sourcecode/relevance_scorer.py,sha256=0AgEt4KrV73nioMqBgjhGjtY7L2C7L7cSyKtj3IKcrw,9408
|
|
58
58
|
sourcecode/rename_refactor.py,sha256=h6dNFlB9aZ_3q6heeHBkgXQeXaT03nvPSsYH6P8qxFg,12965
|
|
59
59
|
sourcecode/repo_classifier.py,sha256=FG1vaWKdWXsWdl-S8hjVMiTqcwgaRXkDyvK4rPcOGtQ,22681
|
|
60
|
-
sourcecode/repository_ir.py,sha256=
|
|
60
|
+
sourcecode/repository_ir.py,sha256=2Za5B4ar0iqPkdlHHttmhcHO4ErTXmg8TyOY3tAO2CA,312842
|
|
61
61
|
sourcecode/ris.py,sha256=Hw8TakTQ6hku-Abf2k8954NwkrH_sP73_8wVH8x5khc,22079
|
|
62
62
|
sourcecode/runtime_classifier.py,sha256=uTAD6BDCiBLUZEDRfqk718kM4RTT_vAbfkcOI2_Xx58,18432
|
|
63
63
|
sourcecode/scanner.py,sha256=z3CV0rcGunu0Y8mpNgp07wI7nxT0pxw1BkXRRtI0Rpo,9609
|
|
@@ -79,8 +79,8 @@ sourcecode/spring_tx_analyzer.py,sha256=7qXwQR9QbpVxbxJC-mawBMXM9xzydtZeq5L18cP_
|
|
|
79
79
|
sourcecode/summarizer.py,sha256=sr0-tfecFKCr-fSkPPWbl-t9HC7SY2ZxkjnnXX8DB2A,26621
|
|
80
80
|
sourcecode/tree_utils.py,sha256=8GAkIfQAsvtEudIeW1l4ooH_oRtrWR8cpJQJsEa_Pfw,2093
|
|
81
81
|
sourcecode/type_usage_surface.py,sha256=51IrKRQoIoRnlsiDjHnqpJBn2rc6E59aRhgS0HTzAF0,4428
|
|
82
|
-
sourcecode/validation_inference.py,sha256=
|
|
83
|
-
sourcecode/validation_surface.py,sha256=
|
|
82
|
+
sourcecode/validation_inference.py,sha256=cQaEJxCBDRWcD0On6PapoGb4qOTEPPlJ1eD4raFHWp0,14099
|
|
83
|
+
sourcecode/validation_surface.py,sha256=A0-FVswL__XOcw92wvIwghwLq5AWtIm2kzO3RjEb1b4,27325
|
|
84
84
|
sourcecode/version_check.py,sha256=CHp6ZxTIfo8kyHPCBgJA1uFC0xQCoXMuuOfrW8QTL8o,4942
|
|
85
85
|
sourcecode/workspace.py,sha256=X_6NmNnitvT3_38V-JDChydo_sR68s249hLFlrQskU0,8271
|
|
86
86
|
sourcecode/detectors/__init__.py,sha256=A0AACJFF6HWf_RgatNtWu3PUzstcKtIGM9f1PoFcJug,1987
|
|
@@ -138,8 +138,8 @@ sourcecode/telemetry/consent.py,sha256=LIAO9ohJZF8OuZwM4u1VWtALlYfTCCKq4wV3Vwc7i
|
|
|
138
138
|
sourcecode/telemetry/events.py,sha256=LtzYfaX9Ilckj5PTvAcTpDa9mLqDsYPDUiDkRa58piY,2580
|
|
139
139
|
sourcecode/telemetry/filters.py,sha256=NHa5T-6DaZduQPFuC34jOqHWQgSizM-Ygq8aZ4j19ng,5834
|
|
140
140
|
sourcecode/telemetry/transport.py,sha256=4gGHsq0WeY9VywEZXA3vUxykfiYnw9uuqfjAAec7F8o,1681
|
|
141
|
-
sourcecode-2.5.
|
|
142
|
-
sourcecode-2.5.
|
|
143
|
-
sourcecode-2.5.
|
|
144
|
-
sourcecode-2.5.
|
|
145
|
-
sourcecode-2.5.
|
|
141
|
+
sourcecode-2.5.19.dist-info/METADATA,sha256=m52i-fTO7exXgHCc5tUJyv2ne4dBOOAtKThagdx4dSo,10852
|
|
142
|
+
sourcecode-2.5.19.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
143
|
+
sourcecode-2.5.19.dist-info/entry_points.txt,sha256=-JEAdChrK5We51kZcb7OaDcyil-dHBjBPL-NhuO-QY8,89
|
|
144
|
+
sourcecode-2.5.19.dist-info/licenses/LICENSE,sha256=7DdHrU9Z_3e7dSvq4ISijZNjnuHo5NIHNiHDouMQ9JU,10491
|
|
145
|
+
sourcecode-2.5.19.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|