6 Commits
Author SHA1 Message Date
safishamsiandClaude Opus 4.8 90d9245c6b fix(r): give every backtick-quoted binding a collision-free id (#4253)
A partially-symbolic backtick name (`%foo%`, S3 `[.cls`, dotted `my.op`)
normalized to the same _make_id suffix as an ordinary identifier, so the second
node was silently dropped by the seen_ids merge. Route every backtick-quoted
name through the reserved __operator__<hex> namespace, not only empty-suffix
operators; #4171's existing ids are unchanged. (The #4253 hang itself was
already fixed by #4171's resolve_local visited guard.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-10 01:01:10 +01:00
Yatharth Verma 96c39d6a88 test: skip optional-extra tests when the extra is not installed (#4190)
Grammar and SDK tests for erlang, r, solidity, vbnet, ollama and the sql encoding case failed instead of skipping on a default uv sync. Guard them with the existing _needs_* skipif pattern and point CONTRIBUTING at uv sync --all-extras to match CI.

Co-Authored-By: Claude <noreply@anthropic.com>
(cherry picked from commit d7f443eeb1)
2026-10-07 17:26:00 +01:00
Huanyi Xie fb8b98fb52 fix(r): preserve symbol-only binding identity
Keep operator scopes separate from their containing file and ordinary normalized identifiers, including nested bindings.

Co-Authored-By: OpenAI Codex <noreply@openai.com>
(cherry picked from commit dc43c7c646)
2026-10-06 20:54:15 +01:00
rajatnagda45 aa2584c455 fix(r): resolve R6 self$ and private$ intra-class method calls
An R6 method reaches a sibling only through self$method() or private$method(),
never as a bare name, but walk_calls only handled a bare identifier callee. So
every intra-class call inside an R6 class was dropped, leaving methods that
clearly call each other disconnected in the graph.

Handle an extract_operator callee whose receiver is self or private: resolve
the method against the enclosing class scope, which is already reachable from
the caller via scope_parent. super$ is deliberately excluded — it dispatches to
a parent class this single-file pass cannot see, so a local binding would be
wrong.

Added a regression test covering both self$ and private$ calls.

(cherry picked from commit 4e00eaf105)
2026-09-28 09:14:38 +01:00
rajatnagda45 a4c6323910 fix(r): recognise namespace-qualified class constructors (R6::R6Class)
R6::R6Class(...) is the idiomatic, library()-free way to define an R6 class,
but call_parts returns the qualified text 'R6::R6Class', which never matched
_CLASS_CONSTRUCTORS. The binding therefore fell through to a plain variable
node and the entire class body — every method — was dropped. The same applied
to methods::setClass / methods::setRefClass in the statement path.

Strip the namespace qualifier before the constructor check in both the binding
path and process_call_declaration, so a qualified constructor is treated
exactly like its bare form. Unqualified declarations are unaffected.

(cherry picked from commit 513bea43c2)
2026-09-28 09:13:29 +01:00
Abdullah d68d6012bd feat: add R language extractor
(cherry picked from commit 250395de31)
2026-09-21 19:10:13 +01:00