Skip to content

Commit 3e2cd39

Browse files
HumanBean17claude
andcommitted
address review: extract _hints_or_skip helper, add test coverage
- Deduplicate 5 inline ternaries into _hints_or_skip() helper - Add test_hints_enabled_defaults_to_true and test_hints_enabled_env_over_yaml_over_default for config precedence - Add test_hints_or_skip_skips_when_disabled to verify gating Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 8eab7c0 commit 3e2cd39

3 files changed

Lines changed: 47 additions & 16 deletions

File tree

mcp_v2.py

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ def set_hints_enabled(enabled: bool) -> None:
4242
global _hints_enabled
4343
_hints_enabled = enabled
4444

45+
46+
def _hints_or_skip(tool: str, payload: dict) -> tuple[list, list]:
47+
return generate_hints(tool, payload) if _hints_enabled else ([], [])
48+
4549
DeclarationSymbolKind = Literal["class", "interface", "enum", "record", "annotation", "method", "constructor"]
4650

4751
# Stored graph edge labels for one-hop neighbors. Composed DECLARES.* and OVERRIDDEN_BY.*
@@ -945,9 +949,7 @@ def search_v2(
945949
"limit": limit,
946950
"offset": offset,
947951
}
948-
raw_struct, raw_advisories = (
949-
generate_hints("search", hint_payload) if _hints_enabled else ([], [])
950-
)
952+
raw_struct, raw_advisories = _hints_or_skip("search", hint_payload)
951953
return SearchOutput(
952954
success=True,
953955
results=hits,
@@ -1038,9 +1040,7 @@ def find_v2(
10381040
"filter": filter_dump,
10391041
"has_more_results": has_more_results,
10401042
}
1041-
raw_struct, raw_advisories = (
1042-
generate_hints("find", hint_payload) if _hints_enabled else ([], [])
1043-
)
1043+
raw_struct, raw_advisories = _hints_or_skip("find", hint_payload)
10441044
return FindOutput(
10451045
success=True,
10461046
results=refs,
@@ -1120,10 +1120,7 @@ def describe_v2(
11201120
f"java-codebase-rag unresolved-calls list --method-id {node_id} for the full list"
11211121
)
11221122
record = NodeRecord(id=ref.id, kind=kind, fqn=ref.fqn, data=data, edge_summary=edge_summary)
1123-
raw_struct, raw_advisories = (
1124-
generate_hints("describe", {"success": True, "record": record.model_dump()})
1125-
if _hints_enabled else ([], [])
1126-
)
1123+
raw_struct, raw_advisories = _hints_or_skip("describe", {"success": True, "record": record.model_dump()})
11271124
return DescribeOutput(
11281125
success=True,
11291126
record=record,
@@ -1453,9 +1450,7 @@ def _resolve_finalize_success(
14531450
"path_prefix_seed": path_prefix_seed,
14541451
"target_service_seed": target_service_seed,
14551452
}
1456-
raw_struct, raw_advisories = (
1457-
generate_hints("resolve", hint_payload) if _hints_enabled else ([], [])
1458-
)
1453+
raw_struct, raw_advisories = _hints_or_skip("resolve", hint_payload)
14591454
out = out.model_copy(update={
14601455
"advisories": raw_advisories,
14611456
"hints_structured": _to_structured_hints(raw_struct),
@@ -1989,9 +1984,7 @@ def neighbors_v2(
19891984
"unresolved_count": unresolved_count,
19901985
"calls_row_count": calls_row_count,
19911986
}
1992-
raw_struct, raw_advisories = (
1993-
generate_hints("neighbors", neigh_payload) if _hints_enabled else ([], [])
1994-
)
1987+
raw_struct, raw_advisories = _hints_or_skip("neighbors", neigh_payload)
19951988
return NeighborsOutput(
19961989
success=True,
19971990
results=sliced,

tests/test_java_codebase_rag_cli.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,31 @@ def test_embedding_device_precedence_cli_over_env_over_yaml_over_default(
223223
assert r3.embedding_device == "cpu"
224224

225225

226+
def test_hints_enabled_defaults_to_true(
227+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch,
228+
) -> None:
229+
monkeypatch.delenv("JAVA_CODEBASE_RAG_HINTS_ENABLED", raising=False)
230+
r = resolve_operator_config(source_root=tmp_path)
231+
assert r.hints_enabled is True
232+
assert r.hints_enabled_source == "default"
233+
234+
235+
def test_hints_enabled_env_over_yaml_over_default(
236+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch,
237+
) -> None:
238+
monkeypatch.delenv("JAVA_CODEBASE_RAG_HINTS_ENABLED", raising=False)
239+
(tmp_path / ".java-codebase-rag.yml").write_text(
240+
"hints:\n enabled: false\n", encoding="utf-8",
241+
)
242+
r = resolve_operator_config(source_root=tmp_path)
243+
assert r.hints_enabled is False
244+
assert r.hints_enabled_source == "yaml"
245+
monkeypatch.setenv("JAVA_CODEBASE_RAG_HINTS_ENABLED", "1")
246+
r2 = resolve_operator_config(source_root=tmp_path)
247+
assert r2.hints_enabled is True
248+
assert r2.hints_enabled_source == "env"
249+
250+
226251
def test_yaml_config_ignores_legacy_filename_reads_new_filename(
227252
tmp_path: Path, monkeypatch: pytest.MonkeyPatch,
228253
) -> None:

tests/test_mcp_hints.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
from mcp_v2 import (
1818
FindOutput,
1919
SearchOutput,
20+
_hints_or_skip,
21+
set_hints_enabled,
2022
describe_v2,
2123
find_v2,
2224
neighbors_v2,
@@ -1307,3 +1309,14 @@ def test_advisories_char_cap() -> None:
13071309
_, advisories = generate_hints("neighbors", payload)
13081310
for a in advisories:
13091311
assert len(a) <= 200, f"advisory too long: {a!r}"
1312+
1313+
1314+
def test_hints_or_skip_skips_when_disabled() -> None:
1315+
"""_hints_or_skip returns empty lists and never calls generate_hints when disabled."""
1316+
set_hints_enabled(False)
1317+
try:
1318+
struct, advisories = _hints_or_skip("search", {"success": True, "results": []})
1319+
assert struct == []
1320+
assert advisories == []
1321+
finally:
1322+
set_hints_enabled(True) # restore default for other tests

0 commit comments

Comments
 (0)