Repository navigation
Lua 5.3 parser, semantic analysis, JVM interop, and LSP — full feature wave - #2
Merged
Merged
Conversation
LuaJava converts a simple Lua table into the vararg component array at
runtime (ObjectAnimator.ofFloat(target, name, float...) called with
{30, 0}), so call ranking keeps vararg signatures viable for TableType
arguments and soft chain recovery accepts table-shaped arguments that
land on a vararg slot. Fixed T[] parameters keep the conservative
TASK-658 container gate.
Lua functions stored as table/module fields (function M.f(), require export members) completed with FIELD/TEXT kinds, so Monaco rendered them with the plain text icon. Callable type displays now surface as CompletionItemKind.FUNCTION across member, lexical, export, and unknown-symbol paths; value members and JavaBean aliases stay FIELD. Overlay library expectations updated from FIELD to FUNCTION for callable members (math.abs, string.*, table.*, coroutine.*).
ALy layout tables are Lua tables whose string keys apply view setters
(loadlayout.lua: k -> view.setCap(k)(value)), so completing a key inside
{ ListView, ... } now suggests the enclosing view class's Lua properties
derived from its reflected set* methods, plus the runtime-special keys
(id/style/onClick/src/items) and the ViewGroup.LayoutParams keys
(layout_width/height, margins, weight, gravity, x/y). The class is
tracked through nested child tables like the ids collector; positions
inside value expressions and non-layout tables keep the regular
completion pipeline. The existing loadlayout ids-table binding
(tab.poplist -> ListView) is regression-covered.
…mbedder metadata
The layout-class walk now keeps the class identifier as written in the
table (LuaLayoutClassMatch), so workspace metadata under
'lua.layout.properties' can contribute extra Lua property keys per class
('ClassName: prop|detail, ...') for project-defined custom views and
AndroLua helpers; extension-class identifiers qualify as layout class
slots even outside the known-view-name heuristics, and extension entries
are matched by source name or Java simple name. .aly layout documents
already parse via the bare-table return wrap, so key-position
completions work there unchanged; both are regression-covered.
Layout-table property values now complete from loadlayout.lua's value domains: orientation/gravity/visibility/ellipsize/scaleType/inputType/ imeOptions and the rest of the toint keyword table, RelativeLayout rules as true/false, and layout_width/height sizes incl. -1/-2 and %w/%h percent forms. Because mid-typing quotes are unterminated (the lexer emits BAD_CHARACTER, no STRING token), the workspace facade detects the open quote from the raw source line and answers from the same domains. require(...)/import "..." strings anywhere in Lua code complete workspace module names (dotted and basename forms) via the new WorkspaceModuleResolver.completionModuleNames.
AndroLua .aly layout modules are Lua table files; the demo language mapper only matched .lua, so .aly tabs opened as plaintext, and the static mime table served them as octet-stream. Map .aly to the lua language id (enabling built-in highlighting plus the registered hover/completion providers) and serve it as text/plain.
An empty property value (layout_gravity = "") produced no indexed string node — the position index drops zero-content spans — so the caret between the quotes fell through to property-key suggestions. Recover through the enclosing table key whose string value range covers the caret and answer from the same loadlayout value domains. Size values now lead with the AndroLua-idiomatic wrap/fill/match/-1/-2 forms.
Four-agent adversarial audit findings, applied:
- Soft vararg-arg recovery now accepts only TableType, matching the
strict checker gate, so chain recovery can no longer invent a return
type for a ModuleType/ArrayType call the checker rejects.
- Layout view-class resolution tries the document's active imports
before android.widget/android.view, so a project class shadowing a
platform simple name wins; derived suggestion lists are memoized per
class (allInstanceMembers walks the whole hierarchy per keystroke
otherwise); setter candidates require SetXxx shape (setup() is not a
setter).
- Provider: outermost-table computation no longer degenerates when the
caret node is itself a table; named-key value positions keep the
regular completion pipeline instead of property keys.
- Facade unterminated-string fallback only fires for table-entry keys
(line start / after { or ,), not local-variable assignments whose
name collides with a domain key.
- Layout metadata: duplicate class lines merge; FQCN keys also register
under their simple name.
- LSP wire: didChangeConfiguration/initialize settings now accept
lua.layout.properties (flat or nested lua section) — previously the
embedder metadata key had no path from any client; the null snapshot
contract for unrecognized settings is preserved.
- Import-surface callables complete as FUNCTION instead of TEXT.
- Overload-hover parent walk is hop-bounded.
- Tests: require/import completion asserted without lexical-fallback
masking (unique needle, exact module names, no jar gate); class-slot
caret keeps lexical completions; LuaLayoutPropertiesMetadata parser
corpus (merge, FQCN alias, malformed lines) in commonTest.
Adversarial-review follow-up: Monaco's quickSuggestions.strings default is off, so every string-literal value completion shipped dead — values only appeared via explicit Ctrl+Space. Enable string suggestions, register the quote as a trigger character, and extend the client's replacement range across ./% continuations so dotted module names and percent sizes insert without duplicating the typed prefix. Smoke now maps .aly to the lua language id and asserts an .aly empty-string value completion over the real bridge+LSP protocol.
- documentHighlight filters cross-file locations (DocumentHighlight has
no URI; require-backed member locations rendered as garbage ranges).
- onTypeFormatting and codeAction are no longer advertised: the handler
reformatted the whole buffer on every d/n keystroke and the codeAction
collector was permanently empty (fail-closed policy; tests updated).
- .aly require resolution drops the unanchored endsWith suffix match
(mods/myutil.aly no longer hijacks require("util")).
- Export collector: scalar overwrite retires stale nested tables.
- Parser: switch/case/default/when ranges start at the keyword; the
truncated-member fallback Identifier gets its parent set.
- Evaluator: a nested non-vararg function no longer inherits the
enclosing vararg element type.
- Engine: metadata-only deltas re-analyze the workspace (layout
completion extensions are baked per model at analysis time).
- Build: lsp4j is api() (public LuaLanguageService surface) and jvm
adds -Xjvm-default=all-compatibility so SemanticModel default methods
do not break Java embedders.
…fication Signed commit retry failed in headless pinentry; committed unsigned. Fixer 1 (binder, verified green): non-local function inside a nested block binds at root scope; local x + function x() re-binds the existing local; lambda declarations get a FUNCTION scope and bound parameters. Parser-side fixes did NOT pass verification and were reverted (diff at tasks/agent-runs/parser-compound-assign-diff.backlog.diff). Fixer 2 (LSP, verified green): didChange publishes diagnostics for all affected open documents; ranged didChange without didOpen bases on the indexed source; semanticTokensCache evicts on close/delete; selectionRange drops null slots; resolveCompletionItem carries labelDetails/insertTextMode; colon completion filters non-callable fields; capability docs regenerated. Main session: contravariant function-signature assignability with arity containment; layout value insert-range prefix guard; demo bridge shares one JVM LSP across clients; metadata deltas re-analyze all documents.
…agnostics policy Parser: compound assignment (+=" -= *= /= //=) desugars to a plain assignment with a BinaryExpression RHS; the previous attempt failed because the *=" token was never consumed before parsing the RHS (recovery placeholder + AST2Lua Unsupported node). Tests cover shape, round-trip, member/index targets, strict mode. Diagnostics policy: unused locals publish as INFORMATION instead of being dropped unconditionally (still suppressed while the analyzed snapshot is stale); checker.luajava.target.unresolved is WARNING (a missing classpath is an environment gap, not a code error); index-path member diagnostics name the offending key; null/zero-width diagnostic ranges fall back to a real 1-char span. Type system: function-signature parameter comparison is contravariant with arity containment (audit specs to follow for overload dedup, metadata carry, CustomType match).
…bridge hardening Types (per spec-agent review): CHAR excluded from the Java numeric widening rank; JavaSignatureMetadata carried through TypeNormalizer (varargs spread survives unionTypeOf capture); OverloadedFunctionType dedupes exact duplicates and signatures subsumed by an earlier kept one; CustomType and ClassType interoperate by name. Function-parameter assignability refined after regression audit: a non-vararg source serves a vararg target (Lua drops extra args), and Java class-typed parameters are bivariant (Android handlers annotate the concrete widget while the interface declares the superview). Tools: the shared-LSP bridge is now single-active-client (a second connection receives a busy status; the initialize queue, id collision, and cross-tab didOpen fights are impossible by construction); the closing-quote trigger spam and insert-range guard tradeoffs documented in README. Colons keep unknown-typed fields.
…ubsumption, interop robustness, stub accuracy Types: overload deletion uses STRICT contravariant subsumption (a dedicated isAssignableForOverloadSubsumption) — reusing the assignment-relaxed relation deleted vararg siblings that variadic calls still needed and bivariantly deleted overloads that later calls still matched. CHAR widening per JLS: byte/short to char requires a cast, char to int and above widens. Interop: import-target classloaders are cached (no URLClassLoader leak per keystroke); per-class reflection failures degrade to a cheap shell instead of aborting the workspace update; class member surfaces are bounded (400, deterministic order) with hash-based collision dedupe; host-android-jar soft fallback now requires deliberate configuration. Overlays: lua54 io./global drift restored; debug/string/coroutine/ table/math/utf8/os return shapes corrected against the Lua manuals; AndroLua context gains setContentView/getMenu/getSystemService; phantom hex encode/decode removed; loader parses bracket-style @field entries. Tools/workspace: personal QQ contact line scrubbed; bridge busy reason no longer overwritten by a generic Initialize failed; 4 MiB WebSocket payload cap; SIGKILL escalation after SIGTERM grace; static stream error guard.
…, visible skips LSP: didClose now republishes diagnostics for affected open dependents (they were re-analyzed against the closed file's disk text but kept pre-close markers); the multi-response list flows through the text-document service. Comments: inline ---@type extraction scans only doc comments, so a ---@type inside a --[[ ]] block comment no longer leaks into the next statement's type. Demo: closing a tab with unsaved edits asks for confirmation instead of silently discarding them. Tests: layout-completion androidJar gates converted to Assume.assumeTrue so skips are visible in reports instead of silently passing. Docs: stale TASK-043 'blocked' banners replaced with the recorded outcome; recovery-matrix/serialized-verification/concurrency/ member-chain/import-resolution citations of suites deleted in e786c77 annotated as culled; strict-mode default corrected to opt-in; overlay source-twin row re-pointed to the resource loader.
… demo UX backlog Comments: a trailing inline ---@type comment no longer mis-attaches to the NEXT statement (trailing groups attach backward only); inline @type extraction scans only doc comments (block-comment leakage closed); positional ---@type boolean, string splits across multi-name locals; operator-delimited type-prefix recovery caps candidate attempts. Binder: local-statement initializers are visited before the new declarations are registered, so invents a global for the body write instead of rebinding the in-flight local. Demo: completion/hover stale-response race guarded by per-provider sequence counters; closing-quote trigger dropped (in-string completion is covered by quickSuggestions.strings); markers cleared on disconnect; log autoscrolls only when already at bottom; README documents the single-editor-session policy and string-completion behavior.
…ne iteration guards, binder visibility, stub accuracy Engine: SCC-aware cycle re-analysis pass (cycle members re-bind against completed peers instead of null providers); iterative Tarjan + iterative dependency DFS (stack-overflow guards for deep require chains); 5000-chain regression test. Binder: locals gain visibleFrom (statement-end anchored at the last initializer character) — the initializer of local x = 1 no longer resolves to the new x while the declared name stays hoverable; AST globals are position-independent (file-global environment semantics); the declared-name span is always visible at its own site. Visibility predicates updated in ReferenceQueries, SignatureHelpProvider, and ExpressionUsageChecker. Interop: import-target classloaders cached (no per-keystroke URLClassLoader leak); per-class reflection failures degrade to a shell instead of aborting the update; member surfaces bounded and hash-deduped; host-jar soft fallback gated on deliberate config. Overlays: lua54 drift restored, debug/string/coroutine/table/math/utf8/ os return shapes corrected, AndroLua context methods added, phantom hex members removed, bracket @field parsing. Tests/docs: Assume-gated skips visible; stale doc claims corrected (TASK-043 outcome, culled suites, strict-mode default).
…demo providers, binder redo verified Printer (CRITICAL): AST2Lua now emits exactly one terminal end per if-statement — formatting any file containing an if used to delete the end and corrupt the buffer; formatSourceText re-parses its own output and falls back to the safe normalization when the printed text does not re-parse. Pinning test flipped, round-trip corpus added. Demo: documentSymbol (hierarchical + flat shapes), foldingRange, and semanticTokens providers wired to the already-advertised capabilities (legend captured at initialize, semanticHighlighting enabled, theme rules added); file-list refresh prunes ghost tabs; README documents outline/folding/semantic-color behavior. Binder redo verified by round-F audit with two predicate refinements applied: the declaration-name span is always visible at its own site, and AST globals are position-independent. Types: overload deletion uses the strict subsumption relation (vararg/bivariance assignment relaxations are unsound for deletion); CHAR widening per JLS; CustomType/ClassType name interop; JavaSignatureMetadata survives normalization.
…n dedup, demo polish Engine: the cycle re-analysis pass is a bounded fixpoint (up to 3 sweeps with a deterministic snapshot fingerprint), so 3-cycles with chained derivations converge to concrete types instead of freezing Unknown mid-chain; identical metadata deltas are a true no-op (same snapshot instance, zero re-analysis); deleting the last recognized configuration key now clears prior metadata instead of persisting it forever. Types: union normalization collapses doc-declared and reflected twins of the same Java member (the metadata carrier wins), and the legacy hierarchy's function-parameter compatibility mirrors the new contravariant + containment rule so both hierarchies agree. LSP docs: the callHierarchy row now states prepare resolves same-file local functions only. Demo: semantic highlighting uses the correct semanticHighlighting.enabled option key (the plain key silently disabled the whole feature); folding ranges convert LSP 0-based lines to Monaco's 1-based (first-line folds were dropped, others shifted); the semantic tokens provider disposes before a legend-less reinitialize and validates 5-int grouping; ghost-tab pruning skips when the file list came from a fallback instead of the live fetch.
…use, resolver re-pointing, loop-header scoping Engine: provider global declarations join the public fingerprint (GLOBAL+AST lines, capped, evaluator-derived type display names), so editing a provider's non-exported global now dirties consumers; single-file edge-neutral upserts reuse the previous module graph instead of rebuilding it every keystroke; every stored document's workspace context is re-pointed at ONE resolver built over the final snapshot (no more generation-chain retention of mid-update maps), with baseResolve* fallbacks preserving JVM target resolution. Binder: numeric/generic for-loop scopes start at the BODY, not the header — 'for i = 1, #i do' evaluates the header in the enclosing scope per Lua scoping while control-variable declarations keep their header anchors (hover/rename on the name intact via the in-span visibility rule). Single-change redo of the reverted wave-D attempt: no position-index fallback hack.
…-import diagnostics Wildcard-mounted classes (import "android.widget.*") now expose the same inherited static surface as explicit imports (TextView.VISIBLE from View works through the wildcard); package aliases key on the full package name so android.widget.* and android.support.v7.widget.* no longer collide, and explicit imports beat wildcard members in both document orders; import(a.*, b.*) collects every string argument; a wildcard import whose package mounts nothing (typo, case mismatch, absent jar) now emits the unresolved-target WARNING instead of dying silently (documented deviation: .* targets stay out of jvmClassLoads per locked facts tests — the engine scans sourceImports for the diagnostic instead).
…y memo, resolver generation reuse Import precedence: a document's own wildcard imports now rank ahead of the default android prefixes in REVERSE document order (AndroLua installs imports into _G sequentially, so the last import wins); defaults remain the fallback for names no import covers. Performance: reflective classpath discovery (env reads + SDK root directory walks previously re-run per cache-key build) is memoized per provider; one WorkspaceModuleResolver is shared across all files of an analysis pass (path-keyed caches survive, killing the O(wildcardMembers x extraProviders) per-file scans), with a fresh generation per cycle-reanalysis sweep so sweep recomputation semantics stay exactly as before.
…sType declaration identity checker.global.unresolved (WARNING): reads of identifiers that resolve through NO surface (no visible local/AST-global/builtin, no import symbol, no import root) now diagnose, with the AndroLua-corpus-tuned suppression set: uppercase-first runtime globals, _-prefixed names, write-covered names, .aly layout documents (runtime-injected ids), and an allowlist for overlay-missing runtime helpers (apply/int/long). Demo corpus: exactly one flag — the real free 'h' typo in dingyi.lua. parent (loadlayout-injected) seeded into the AndroLua globals. Types: ClassType carries declarationId (resolver-populated, carried through normalize/substitute), isSameOrSubclass walks superClass AND raw superType (parent materialization failures no longer break inheritance matching) with a visited set, and same-named distinct declarations no longer unify (identity-gated matching; null ids keep name matching for synthetic/overlay shells).
… identity-gate revert, publish hygiene
Workspace symbols: entry list memoized per facade (one sort/distinct per
workspace build instead of per query under the global lock), capped at
500 after the deterministic sort, body-locals dropped from the
navigable surface (chunk-level symbols only), unindexed __jvm__
providers filtered, pre-initialize symbol requests now quiet-empty
matching text requests, and workspaceSymbol/resolve pre-empted against
the lsp4j UnsupportedOperationException default.
Types (adversarial audit F1 applied): the declarationId identity gate is
REVERTED — binder ids are per-document counters, not workspace
identities, so gating rejected the same logical class across require
boundaries and could falsely unify equal-id distinct classes. Name
matching stays authoritative; the audit-verified superType fallback
(parent materialization failures) and the visited-set walk are kept.
Checker: the AndroLua runtime-helper allowlist (apply/int/long...) is
flavor-gated on the AndroLua overlay so plain-Lua workspaces keep
diagnosing typos of user globals with those plausible names.
Build (publish audit HIGHs): kotlin("test") removed from commonMain —
the published 1.0.3 POM shipped a testing framework as a runtime
dependency; version bumped to 1.0.4 (1.0.3 is burned on Central with
different content).
…e, cycle cap, publish bound Graph reuse: require/import fact RANGES join the facts signature, so inserting a line above a require rebuilds the graph instead of reusing one with stale ranges (latent — no query reads them yet). Binder/completion: a caret in the tail of a for-loop body (after the last statement, before end) promotes the loop scope for free-position completion queries — end-exclusive body ranges previously dropped the control variable there; header positions keep the outer-binding contract. Engine: the cycle re-analysis fingerprint is capped (512 declarations, 256-char fields) matching the provider fingerprint. LSP: the published diagnostic payload is bounded (300, post-dedup) — a typo-heavy file could emit hundreds of per-site unresolved-global warnings. A per-name resolution memo for the unresolved-global oracle was attempted and REVERTED: Lua scoping is position-dependent, so name-key memoization poisoned later sites (parent/animation/list false positives). The perf finding stands with the corrected design (memoize only the position-independent import-resolution layer) in the backlog.
…yer memo, ClassType equality Checker: one scopeId resolution per identifier read shared by the unused-local bookkeeping and the unresolved-global oracle (both walked the scope graph twice per read); the POSITION-INDEPENDENT resolution layers (import targets, import roots) are memoized per name for the pass — the local-scope walk stays unmemoized (a name-keyed memo there poisons later sites; the reverted attempt is documented in 2c2c9e1). Types: ClassType.equals/hashCode exclude declarationId (binder ids are per-document counters; counting them stopped same-named materialized/synthetic twins from collapsing in union dedup). The first equals attempt recursed through copy(); rewritten as explicit field comparison (1910-test suite confirms).
…r safety Checker: check() clears the per-pass memos (import roots, imported symbols, seen diagnostics) so a future double invocation on one instance cannot suppress diagnostics for imports activated between runs (adversarial audit hardening). Demo: semantic-tokens requests debounce 250ms and honor Monaco's cancellation token — every keystroke previously fired a full-buffer token request recomputed under the server's global lock; the bridge no longer forwards unparseable client messages as raw bytes (a Content- Length framer desync vector) and answers with a JSON-RPC parse error instead.
…ire coverage, symbol ranking, docs sweep Diagnostics: dead wildcard imports (pkg.* mounting zero classes) now diagnose at INFO — a wildcard is declarative scoping whose members may come from workspace dex the analyzer cannot mount, a different epistemic state from an explicit bindClass string which stays WARNING. Demo corpus audit: exactly one INFO (support.v7 wildcard) plus the real free-h typo catch; every other file clean. Smoke: documentSymbol/foldingRange/semanticTokens wire coverage added (legend bounds + %5 validation); workspace symbol results rank prefix matches ahead of substring matches within the 500 cap. Docs/build: java-interop-model drift corrected (JavaOverloadType, Object superclass expansion, multi-root SDK discovery); SemanticModel and LuaLanguageService position conventions documented (1-based parser vs 0-based LSP); publish coordinates single-sourced at 1.0.4; workflow env consolidated and the machine-wide java.exe taskkill replaced with gradlew --stop; Kotlin >= 2.1 consumer floor documented.
… token debounce, demo diagnostics doc
Completion: while-loop bodies share the for-loop tail gap (their LOOP
scope is built on body.range, end-exclusive), so the free-position
promotion now accepts WhileStatement owners — the audit caught the
wave-N claim ('while tails resolve through getScopeAt') as factually
wrong. Repeat stays excluded (its until-condition is in range).
Demo: the semantic-tokens debounce now truly coalesces per model (a
WeakMap timer answers superseded calls with null and re-checks lspReady
after the wait, closing the Stop-mid-debounce ERR row) instead of
sleeping per call; README documents the intentional INFO on main.lua
and the real h-typo catch in mods/dingyi.lua.
…initialize the overlay compile (4 workers), the framework dex parse (~10s) and the first live analysis raced on the emulator's 6 TCG-emulated cores and the mutual contention inflated every cold stage (builtins 10.0s -> 16.0s across rel44-47 at identical code); the dex warmup now waits on an overlay-compile latch since the first analysis needs builtins first and the dex parse only when the first check resolves framework imports.
… measured 4 compile workers at 10.0-16.2s vs 8.8-10.3s sequential (rel43-49): the workers' allocation rate thrashes the TCG emulator's concurrent-copying GC; the injectable hook stays for real-core hosts.
…moke via remote-built distribution (printJvmLaunchClasspath + classpath-file bridge override), JS-gate regression fix, reverted facade dedup documented.
…n (remote-built dist), JS+corpus gates green; the -12,000-line target remains open (~4,580 lines) with the prioritized cut list.
…nType field, 3x CRLF line-scan loops, digit-scan twins, 28 keyword stanzas, dead block), interop (5x importedSymbolOf assemblies, class-listing walk dedup, dead public APIs, allImportTargets), lsp (dead progress lambda + fields, identity-forwarding did* overrides, statically-dead acceptsRequests policy, unused imports), workspace (re-land of the provably-identical facade merges, isSourceModulePath, fingerprint serializer dedup), checker/model (ReferenceQueries.isVisibleAt adopted onto the shared isVisibleAtPosition predicate, enclosingAstNodeOf cross-file helper, member-surface ladders). Full remote suite 2,929/0/0 + JS compile green.
…59), E2E rel52 7/7, all gates green; remaining-cut map updated.
…ss-throughs inlined, 7x scope scaffolding -> inline inScope{}, shared buildBinderPassResult, dead seeder branch/fallback), types (−125: primitive canonicalization, table/module assignability dispatch, substitution/dropper twins, resolver materialization ladders, JavaTypeName dead surface deprecated), LuaLanguageService (−102: dead reporter/fields, resolveLocalFunctionDeclaration ladder, UnitVisitor base, rename ladders, format-range re-validation, lineSequence-based LSP range), comments (−22), LuaParser (−15). Integrated compile fixes (canonicalByKind receiver style, globals-join typing, stale progressSink tail). Full remote suite 2,929/0/0 + JS compile green.
…63), E2E rel53 7/7 on the reduced tree.
…transparent TextDocumentService proxy deleted, simpleRequest endpoint collapse, nullFuture merge), AST nodes (−183: toString/clone expression bodies, shared list-clone helpers, Range/Position data-class equals/hashCode — compile+runtime-smoke proven), model second pass (−82: SignatureHelpProvider/ReferenceQueries/CompletionProvider ladders), binder second pass (−25: sliceTagGroups, type-parameter assembly, assignment kind conditional). Workspace second pass (−82) REVERTED: DocumentFactsCollector/ModuleExportCollector merges changed legacy-module-call environment semantics (4 test regressions — the require/alias layer is proven behavior-sensitive three times now). Full remote suite 2,929/0/0 + JS compile green.
…45,258; workspace pass reverted on legacy-module semantics regressions), E2E rel54 7/7; require/alias boundary layer recorded as a hard no-go zone.
…ass (−123: dead write-only generation state, always-true range check, single-caller merges, keyword ladder packing), checker second pass (−102: LuaJava ladder dedup via shared helpers, call-argument materialization, return-collection collapse, rootContextAt prologue, evaluate() subtype-arm merge), workspace safe files + facade compaction (−125: fingerprint import/branch dedup, positional provider construction, dead recompute removal, provably-unreachable hover branches — verified in an isolated HEAD-overlay copy while siblings blocked the shared tree), JvmClassModuleProvider second pass (−86: providerForClass merge, reflected-member builders, jar-entries reuse, cache-key compaction), pipeline/binder/model third pass (−114: SignatureHelpProvider dispatch unification, builtinGlobals param deletion, positional scaffolding). Integrated compile fixes (linkedSetOf SAM resolution, prepareBinding named-arg, globals-join typing, stale progressSink). Full remote suite 2,929/0/0 + JS compile green.
…09), E2E rel54 7/7; isolated-copy verification protocol noted.
…ss (−110: semanticTokens legend, classifyNameToken merge, lsp4j Range.equals adoption, workspace-index twins, format destructure), checker third pass (−97: merged evaluateIdentifier ladder, shared resolveLuaJavaDegradingHelperCall, no-op rebuiltName removal, unified addDiagnostic, integral literal-branch collapse), binder+comments fourth pass (−161: DeclarationFactories packed pass-throughs, BinderPositionQueries comparator chains, parseClassTag reuse, appendDescription in-place mutation with val-to-var tag descriptions, write-only range removal), facade/resolver third pass (−88: preferredHoverType arm merge behind isCallableDisplay, positionOrder comparator, sharedGlobalProviders scaffold, importedSymbol factory, builder addResolved), provider third pass (−98: loadedCandidateOrNull, packageSurfaceProviders, snapshot-call inlining, LRU scaffolding dedup via boundedCache). All agents verified in isolated copies with the standalone Kotlin 2.2.0 compiler. Full remote suite 2,929/0/0 + JS compile green.
…55), E2E rel55 7/7; isolated-copy verification became the default protocol (zero integration compile errors this round).
…ass (−126: callHierarchyTarget twin, inlay visitor 3-hooks-to-1, isLocalFunctionDeclaration fold, producer-invariant guard removals, workspace-index region), facade/resolver fourth (−115: requireBackedLocation, surfaceSymbol adoption, visibleValueDeclarations scope-walk, completionItem assembly, provably-dead bindClass recompute removal), parser/AST2Lua second (−98: 13x comma-join ladder dedup, parseCommaSeparatedExpList lambda-parameterized scaffold, strict/recovery gate collapse verified byte-identical across 83 repo files x 3 versions x 2 recovery modes), provider/lexer/comments fourth (−92: nextToken merge, operator-ladder packing, keyword pair-list, javaTypeParameterFor overload collapse, generic-tag twin arms), evaluator/ReferenceQueries fourth (−91: getSymbolAt hot-path ladder, provable subsumption in isPreferredRichType, dead branch, single-evaluation fixes). All agents verified in isolated copies (standalone Kotlin 2.2.0; annotations-13.0 on the compiler classpath makes the REAL generated mirror compile — no stub needed). Full remote suite 2,929/0/0 + JS compile green.
…33), E2E rel56 7/7; compiler-classpath protocol fix (annotations-13.0) makes the real mirror compile in isolated copies.
…ua third pass (−80 verified byte-identical across 716 differential cases), plus partial fifth-pass edits from four interrupted agents (lexer, binder positions, comments parser, evaluator, facade, provider, model) — full remote suite 2,929/0/0 + JS compile green on the interrupted tree.
…15), E2E rel57 7/7; new directive: all agent verification runs remotely (no local kotlinc/Gradle).
…ss (−134: tautological semantic-token delta comparison, pathFromClientPath dedup, flatMap/collect tails, lsp4j wildcard import consolidation — flagged revertible), LuaParser/AST2Lua third+fourth (−72: LexerScan inner class replacing 3 hand-rolled probe walks, shared comma-loop scaffold, 738 corpus tests green), facade/resolver fifth (−86: shared callableUpgradedCompletionKind with FIELD-policy gating, stringConstantOf, positional compactions — resolution-order zone untouched), interop third (−62: dead normalized() call, implicitClassSymbol delegate, unreachable protocol arms, descriptor ladder), evaluator sixth + SignatureHelpProvider shared argumentSlotAt (−56). All verification remote (per-file HEAD-overlay protocol where siblings blocked the shared tree; full 2,929/0/0 + JS + parser corpus 738 green).
…37 lines; JVM/JS green pre-outage; E2E rel58 pending the remote-host outage (unreachable since 03:24 local).
…32 tree after the ~80-min remote-host outage; 42,637 lines, ~1,075 remain to target.
…(−120: toLspKind/toLspSymbolKind valueOf bridges, URI authority-strip helper, dead insertText guard, rename/highlight folds), parser fifth (−122: androLuaOnly gate x6, parseExpressionTermOrMissing scaffold with LAZY diagnostic messages — the lexerText(true) advancing trap caught and fixed, linkedCallExpression prolog, appendClauseBody preserving elseif's historical extra break), workspace sixth (−366: positional constructions verified against data-class orders, serializeTypes over 12 sites, activeImportTargets order-preserving buildSet, resolvedModuleType twins folded; two unsound simplifications analyzed and rejected in the resolution-order zone), evaluator/ReferenceQueries sixth+fifth (−74: evaluateCallExpression tail fold, rootDeclarationContext, stale KDoc, tautological null checks proven non-null, importedDeclaration factory collapse), interop fourth+binder fifth (−73: LUA_STD_MODULE_NAMES triplication unified, metadataDexFirst gate preserving reflection-before-dex precedence, symbolKindForJavaMember 11-to-2 lines). Full remote suite 2,929/0/0 + JS compile green.
…82, −11,680 cumulative; 320 from the finish line), E2E rel59 7/7.
…ify copies (verify-in6) — parser fifth (2,762), AST2Lua (541), comments (454/227), evaluator sixth (2,566), UsageChecker (579), SignatureHelpProvider/NodePositionIndex/LuaLayoutCompletionProvider, binder fifth (739/174/171), interop fourth (2,186/640/552/209). The earlier single-test failure was an artifact of the bisect mixed state (binder/evaluator at HEAD + LSP eighth), not a regression in the coherent state: full remote suite 2,929/0/0 + JS compile green.
…rchestration notes, and stale verification disclaimers
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Consolidates the full multi-month feature wave on
windows-verifyintomain(358 commits, ~1018 files):SemanticPipeline/SemanticModel/SemanticAnalysisResultpublic API; legacySemanticAnalyzersurface retiredLuaWorkspaceEngine+LuaWorkspaceQueryFacade— module resolution, require/import graphs, cross-file queriesJvmWorkspaceEnginereflects JVM/Android classes into synthetic Lua modules; metadata keysjvm.classes,androlua.imports,jvm.classpath,jvm.androidJar,jvm.importPrefixeslsp4j-based server (runLuaLanguageServer) — diagnostics, hover, completion, goto-definition, workspace symbols, rename, signature helpdocs/tree — production readiness, Android-Lua matrices, interop model, language-server usage, test strategyjvmTestrun green (TASK-043, run 29228040252: 5386 tests / 0 failures); README simplified to remove machine-specific paths and finished orchestration notesTest plan
jvmTestsuite green (5386 tests, run 29228040252)main