release: 2026-06-26#779
Merged
Merged
Conversation
Hover on expressions inferred as `Core.Const(nothing)` or `Core.Const(missing)` previously appended the raw lattice value as a detail comment, which could appear tedious, since the header already shows `Nothing` or `Missing`. Skip extended lattice details for `Core.Const` values whose payload is `nothing` or `missing`, preserving details for other constant lattice elements. Co-Authored-By: GPT-5.5 <noreply@openai.com>
Signed-off-by: John E <jeis4wpi@outlook.com>
The TypeAnnotation test for tuple-yield comprehensions used a typed destructuring iterator form that is not valid Julia syntax. That made the test sensitive to JuliaLowering behavior for malformed input instead of checking the intended user-visible type query.
Switch the case to a valid tuple destructuring generator while preserving the assertion that the yielded tuple expression is annotated as `Tuple{Float64, Float64}`.
Co-Authored-By: GPT-5.5 <noreply@openai.com>
Hovering on the name inside a symbol literal such as `:foo` previously rendered `foo :: Symbol # Core.Const(:foo)`. This could look like a hover on a normal binding named `foo`, and the raw constant lattice value was redundant because the literal itself is already visible. Use the surrounding symbol-literal syntax for the hover header and range while retaining the inner identifier range for the type query. Also skip binding-doc lookup for such literals so a same-named global does not affect the hover. Covered by `test/test_hover.jl` cases for `:foo`, `:(foo)`, and a same-named documented global. Co-Authored-By: GPT-5.5 <noreply@openai.com>
Update the JuliaSyntax and JuliaLowering revisions used by JETLS. The newer JuliaLowering checkout changes typed generator lowering, so queries for typed comprehension bodies such as `[x for x::Int in xs]` can otherwise surface intermediate type-checking results in type annotations and inlay hints. Adjust `TypeAnnotation` to treat opaque-closure construction ranges as body-result queries when a scoped closure return value is available. This keeps the yielded expression annotated with its source-level value while leaving annotations for inner expressions such as `y`, `z`, and `sin(y)` intact. Adds TypeAnnotation coverage for typed iterator bodies with branching and block-form expressions. Co-authored-by: GPT-5.5 <noreply@openai.com>
Update dependency revisions that affect JETLS analysis behavior. This pulls in fixes for world-age-related failures that could surface as `toplevel/error` diagnostics when analyzing top-level `@eval` loops that generate methods. Bump the staged `JET.jl` revision and `Revise` compat/source pin, and record the dependency-update and issue-closing notes in `CHANGELOG.md`.
Repeated script or notebook re-analysis could leave methods from an old virtual module visible. It could also try to delete the same method twice and log `Method ... already disabled` during cleanup. Remove the previous analysis result from `AnalysisRequest` so queued, debounced, and pending requests only carry scheduling metadata. Build `AnalysisExecution` at resolve time to capture the current baseline result for the whole run, including intermediate result publication , and make method cleanup skip already-disabled methods. Co-authored-by: GPT-5.5 <noreply@openai.com>
`vendor-deps.jl --local` rebuilt root `[sources]` from scratch. That dropped source entries for non-vendored direct dependencies, including `Revise`, so the final `Pkg.instantiate()` fell back to General and failed while `Revise` 3.16 was still unreleased. Keep the existing `[sources]` table when updating the root project. Vendored packages still overwrite their own source entries, while non-vendored entries are preserved. Co-authored-by: GPT-5.5 <noreply@openai.com>
Lowering failures during type annotation currently emit an error log even when the server can recover by returning `nothing`. This makes routine parse or lowering failures noisy outside development mode. Wrap the existing `@error` path in `JETLS_DEV_MODE` and print the caught backtrace only in that mode. The production path continues to recover by returning `nothing` without adding language server log noise.
JETLS development mode previously ran Revise from the LSP receive callback and dispatched handlers with `@invokelatest`. When JETLS analyzed itself, ordinary requests could update both the analyzed code and the running language-server machinery to the latest methods. Add a server world age captured at initialization and route dev-mode handler dispatch through `Base.invoke_in_world`. Apply Revise before Revise-based full analysis so the analysis snapshot sees updated package methods without changing the running server code. Add a `.JETLS_REVISE` watched-file trigger to apply Revise and explicitly advance the server world when needed. This does not isolate mutable globals or existing server state. Structural changes to running server objects may still require a restart.
The server callback hook was originally used to observe every incoming and outgoing LSP message. In development mode it also served as the place where Revise was invoked, which made the running server machinery update on ordinary message receipt. Now that Revise is applied at explicit analysis and server-world advancement points, the generic callback path is no longer needed for production server execution. Remove the callback-based `runserver` entry points and make `Server` store only an optional concrete message recorder used by tests. This is an internal API cleanup. Code that used `runserver(callback, ...)` or `Server(callback, endpoint)` should use the supported `Server(endpoint)` path or the test-only `ServerCallback` recorder instead.
The zero-argument test server constructor carried a `suppress_notifications` flag, but the flag only guarded one diagnostics-clear notification path. Most server notifications and diagnostics refreshes ignored it, so the name overstated its behavior and kept extra constructor plumbing around. Remove the flag from ServerState and Server constructors. The cache update path now sends the diagnostics-clear notification whenever deleted testset information requires it, and the CLI check server no longer passes the obsolete option.
Native inference helpers previously invoked CC.typeinf through a dedicated NATIVE_INFERENCE_WORLD captured during initialization. That added a second implementation-world pin separate from server dispatch, making the helper behavior harder to reason about. Call CC.typeinf directly from infer_frame! and abstract_call_const while keeping the target analysis world on CC.NativeInterpreter(world). This leaves world selection to the caller and removes the unused initialization hook. Tests were not run; this commit only records the staged cleanup.
`LSInterpreter` precompilation is now fixed so that it actually works. As a result, `Foo` is now genuinely defined in `__demo__` along the JET's virtual process, which makes it possible to exercise other LSP features using it later. Using that, JETLS now exercises the property-completion pass, precompiling `native-inference.jl`. Also exercise the `collect_type_inlay_hints!` workload, precompiling `TypeAnnotation`. Co-Authored-By: GPT-5.5 <noreply@openai.com>
…778) Property completion (`obj.`) previously returned no suggestions in some contexts where the incomplete `prefix.│` accessor at the cursor prevented type inference of the prefix, such as inside `try`/`catch` blocks or on the right-hand side of an assignment (`out = obj.`). Introduce `get_dotprefix_inferred_ctx`, which builds the inferred context from a virtual source where the cursor's incomplete `.partial` accessor is removed, instead of relying on generic AST repair to handle every parser-recovery shape around `prefix.│`. The helper `property_completion_hole_end` computes the byte range to delete (the dangling dot plus any partially-typed identifier under the cursor). Since property completion only needs the prefix type, this narrower virtual-source approach sidesteps the fragile recovery cases that previously broke inference. Add tests covering `r.│` and `out = r.│` inside a `try`/`catch` block. Co-authored-by: GPT-5.5 <noreply@openai.com>
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.
This PR releases version
2026-06-26.Checklist
release / Test JETLS.jl with release environmentrelease / test_app / Test jetls serverelease / test_app / Test jetls checkrelease / test_app / Test jetls schemarelease / check_schemas / Check schemas are up to datePost-merge
releases/2026-06-26branch can be deleted after merging