Conversation
The create-release and update-changelog jobs were failing because they tried to checkout or fetch the PR head branch (releases/*), which may already be deleted by the time the workflow runs. Changed both jobs to use the release branch instead, which contains the merged content and is always available. Written by Claude
Pkg.Apps.update("JETLS") does not always work reliably. Changed all
documentation to recommend re-running the installation command
(Pkg.Apps.add with rev="release") for updates instead.
Written by Claude
The Revise integration added during the jetls executable app migration didn't work properly. Revise assumes it's loaded from a REPL session, so dynamically loading it via Base.require at runtime failed silently. This change makes Revise a direct dependency that's conditionally loaded at compile time based on JETLS_DEV_MODE. When the flag is set, Revise is imported "normally"; otherwise it's set to `nothing`. This seems to make Revise work as expected for development while having no impact on release builds.
Previously, the server would attempt to send an error response for any message received after a shutdown request. However, notifications don't have an id field and cannot receive responses per the LSP specification. This change checks if the message has an id before sending an error response, silently ignoring notifications that arrive after shutdown.
Previously, when multiple files were opened simultaneously, each could trigger `lookup_analysis_entry` which calls `activate_do` to switch environments. Without synchronization, this could cause race conditions where concurrent environment switches would interfere with each other, potentially causing package environment detection to fail. This fix adds a global `ACTIVATE_LOCK` to serialize all `activate_do` calls, ensuring that environment activation, the callback execution, and environment restoration happen atomically.
…lts (#337) Add automatic `Pkg.instantiate()` for environments that have not been instantiated yet (e.g., freshly cloned repositories or new project directories). This allows full analysis to work immediately upon opening files in such environments, whether they are package source files, test files, or scripts with their own Project.toml. Also add caching for environment detection results to avoid redundant `Pkg.instantiate()` calls and `Base.identify_package_env` lookups for the same environment. The behavior is controlled by `full_analysis.auto_instantiate` config option (default: `true`).
The `pending_analyses` check was previously done in `request_analysis!` before debouncing. This caused a problem when multiple requests for the same entry arrived during the debounce period: they would all pass the check (since no analysis was running yet) and all get queued after their timers fired. With multiple analysis workers, this could lead to duplicate analyses running concurrently for the same entry, defeating the purpose of per-entry serialization. By moving the check into `queue_request!` (which is called after debounce), we ensure that only one request per entry is ever queued at a time. Also adds a docstring to `request_analysis!` explaining the `pending_analyses` mechanism and its relationship to generation checks.
…disabled When `auto_instantiate` is disabled, check if the environment is instantiated using `Pkg.Operations.is_instantiated` and warn the user if not. `ensure_instantiated` now returns a boolean indicating whether the environment is ready for package-level analysis, allowing callers to decide whether to fall back to script-level analysis.
Refactor the full-analysis system to provide earlier and more accurate progress reporting. Progress now begins during entry lookup phase (especially during environment instantiation) rather than waiting for analysis to actually start. This gives users immediate feedback when opening files in projects that require instantiation.
Co-authored-by: Camillo Schenone <camillo.schenone@jasco.com> Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com>
…rogress (#345) Split analysis entry lookup into two phases to enable dedicated progress reporting for environment instantiation and analysis. Phase 1 (`lookup_analysis_entry`) performs a non-blocking check that returns: - `AnalysisEntry` directly if no instantiation is needed (cached or no env) - `InstantiationRequest` if instantiation is required - `OutOfScope` if the file is out of analysis scope Phase 2 (`do_instantiation` or `do_instantiation_with_progress`) performs the actual instantiation when needed. This design allows the server to issue separate progress tokens for instantiation and analysis phases, providing users with earlier and more accurate progress feedback. The `InstantiationProgressCaller` is non-cancellable since instantiation cannot be cancelled, while `AnalysisProgressCaller` remains cancellable. Also consolidate the entry point: replace separate `request_analysis_on_open!` and `request_analysis_on_save!` functions with a unified `request_analysis!` that handles both cases via the `onsave` parameter. Co-authored-by: Claude <noreply@anthropic.com>
) The `remove_macrocalls` function converts macrocall nodes to block nodes to enable LSP features to work with local variables inside macrocalls. However, this transformation caused `@nospecialize` and `@specialize` macros in function argument lists to become invalid block expressions, which prevented JuliaLowering from generating correct lowered trees. This commit adds special handling for these macros: instead of transforming them, we keep them intact. JuliaLowering.jl provides new macro style definitions for `@nospecialize` and `@specialize`, so they don't need to be removed in the first place. This fix enables document highlight and rename to work correctly for function parameters annotated with these macros.
auto-instantiation When `auto_instantiate` is enabled and no manifest file exists, JETLS now creates a versioned manifest file (e.g., `Manifest-v1.12.toml`) before running `Pkg.resolve()` and `Pkg.instantiate()`.
…lls` (#347) Provide mock `@specialize` defintions
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
2025-11-30.Checklist
release / Test JETLS.jl with release environmentrelease / Test jetls executable with release environmentPost-merge
releases/2025-11-30branch can be deleted after merging