Most of these lsp packages are already in `lsp-client-packages`, which
lsp-mode will eagerly load the first time `lsp-mode` is activated, so we
don't need to do it ourselves, except in cases where the package isn't
in `lsp-client-packages` (like lsp-julia).
Having the same rule in two separate package configs means users must be
aware of both to modify either, which is avoidable complexity. i.e.
(after! (:or julia-repl julia-snail)
(set-popup-rule! "^\\*julia" ...))
- julia-snail-multimedia-enable is buffer-local, so setq-default is
needed.
- julia-snail-popup-display-eval-results is already :command upstream.
- julia-snail will automatically calculate a (reasonable) value for
julia-snail-popup-display-face in the absence of an explicit setting.
- julia-snail-popup-display-face was filled with references to
doom-themes symbols that aren't global. It's any wonder they worked
before this. Besidse, it's best we not couple this module with one
specific theme (or theme pack in this case).
Close: #7625
Co-authored-by: ngharrison <ngharrison@users.noreply.github.com>
featurep! will be renamed modulep! in the future, so it's been
deprecated. They have identical interfaces, and can be replaced without
issue.
featurep! was never quite the right name for this macro. It implied that
it had some connection to featurep, which it doesn't (only that it was
similar in purpose; still, Doom modules are not features). To undo such
implications and be consistent with its namespace (and since we're
heading into a storm of breaking changes with the v3 release anyway),
now was the best opportunity to begin the transition.
Moved add-hook calls (for tree-sitter initialization) into their
respective modes' config blocks, or nearby, to be consistent with how
other, similar tools (like lsp!) are initialized, and does so at
runtime, rather than at expansion/compile time, which eval-when! caused.
BREAKING CHANGE: break the global nature of the tree sitter
module by adding a +tree-sitter flag to every applicable module
In the background this hooks turn-on-tree-sitter-mode
to the major-mode-hook of the language.
This may also solve the eager loading of tree sitter
* lang/julia: include lsp-julia w/o language server
Use nonrecursive clone to get lsp-julia without bundled
LanguageServer.jl (plus dependencies) and include instructions in the
README on how to install the language server (bundled or otherwise).
* lang/julia: add checks for julia +lsp in doctor
Add two checks, both only for when the +lsp feature is enabled:
- Check if (:tools lsp) is selected
- Check if LanguageServer.jl is installed
* lang/julia: indicate SymbolServer.jl as dependency
It is itself a dependency of LanguageServer.jl, but it's necessary to
add it separately in order to do `using SymbolServer`.
* tools/lsp: add julia language server to list
* lang/julia: add eglot support using eglot-jl
Forcing eglot-jl to not install its own LanguageServer.jl is a bit of a
hack though.
* lang/julia: make timeout increase buffer-local
Suggestion by @benneti to use `setq-local` instead of `setq` to prevent
a timeout increase in non-Julia eglot buffers.
* Fix issues
Co-authored-by: Henrik Lissner <henrik@lissner.net>
Now that we are loading package autoloads files (as part of the
generated doom-package-autoload-file when running make autoloads), many
:commands properties are redundant. In fact, many def-package! blocks
are redundant.
In some cases, we can do without a config.el file entirely, and can move
into the autoloads file or rely entirely on package autoloads.
Also, many settings have been moved in their module's autoloads files,
which makes them available ASAP; their use no longer depends on module
load order.
This gained me a modest ~10% boost in startup speed.
+ enable lexical-scope everywhere (lexical-binding = t): ~5-10% faster
startup; ~5-20% general boost
+ reduce consing, function calls & garbage collection by preferring
cl-loop & dolist over lambda closures (for mapc[ar], add-hook, and
various cl-lib filter/map/reduce functions) -- where possible
+ prefer functions with dedicated opcodes, like assq (see byte-defop's
in bytecomp.el for more)
+ prefer pcase & cond (faster) over cl-case
+ general refactor for code readability
+ ensure naming & style conventions are adhered to
+ appease byte-compiler by marking unused variables with underscore
+ defer minor mode activation to after-init, emacs-startup or
window-setup hooks; a customization opportunity for users + ensures
custom functionality won't interfere with startup.