You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
I've previously had similar issues- #157
Now by debugging (lsp-dart-get-sdk-dir) I've determined the cause of my issues.
(NB that flutter is added to my $PATH via a nix-shell and envrc)
Debugger entered--Lisp error: (error "Dart SDK not found inside flutter cache dir /nix/s...")
error("Dart SDK not found inside flutter cache dir %s. C..." "/nix/store/i8r6cbgmrcpzhk3w4fqvvx18qm1y645q-flutte...")
(if (file-exists-p dart-sdk) dart-sdk (error "Dart SDK not found inside flutter cache dir %s. C..." dart-sdk))
(let ((dart-sdk (expand-file-name "bin/cache/dart-sdk/" (lsp-dart-get-flutter-sdk-dir)))) (if (file-exists-p dart-sdk) dart-sdk (error "Dart SDK not found inside flutter cache dir %s. C..." dart-sdk)))
(progn (let ((dart-sdk (expand-file-name "bin/cache/dart-sdk/" (lsp-dart-get-flutter-sdk-dir)))) (if (file-exists-p dart-sdk) dart-sdk (error "Dart SDK not found inside flutter cache dir %s. C..." dart-sdk))))
(if (lsp-dart-flutter-project-p) (progn (let ((dart-sdk (expand-file-name "bin/cache/dart-sdk/" (lsp-dart-get-flutter-sdk-dir)))) (if (file-exists-p dart-sdk) dart-sdk (error "Dart SDK not found inside flutter cache dir %s. C..." dart-sdk)))))
(or lsp-dart-sdk-dir (if (lsp-dart-flutter-project-p) (progn (let ((dart-sdk (expand-file-name "bin/cache/dart-sdk/" (lsp-dart-get-flutter-sdk-dir)))) (if (file-exists-p dart-sdk) dart-sdk (error "Dart SDK not found inside flutter cache dir %s. C..." dart-sdk))))) (and (lsp-dart-flutter-snap-install-p) "~/snap/flutter/common/flutter/bin/cache/dart-sdk") (let ((result (let ((result (let ... ...))) (if result (progn (locate-dominating-file result "bin")))))) (if result (progn (file-truename result)))))
lsp-dart-get-sdk-dir()
eval-expression((lsp-dart-get-sdk-dir) nil nil 127)
funcall-interactively(eval-expression (lsp-dart-get-sdk-dir) nil nil 127)
command-execute(eval-expression)
So- if lsp-dart detects that the project root is a flutter project, it tries to find the dart sdk in (lsp-dart-get-flutter-sdk-dir)/bin/cache/dart-sdk. Due to how flutter is packaged in nixpkgs though, the dart sdk is not found there.
In my case, (lsp-dart-get-flutter-sdk-dir) evaluates to "/nix/store/i8r6cbgmrcpzhk3w4fqvvx18qm1y645q-flutter-wrapped/".
So in that case an error will be returned and lsp-dart won't try to find the dart sdk from $PATH
What complicated my issue is that one of my project repos didn't contain one flutter project, but a monorepo with multiple flutter projects in subdirectories. In that case, lsp-dart found the dart sdk from my $PATH instead. I was very confused about this, because I didn't get why the analysis server was started in one project but not the other.
Is there anything that can be done without unreasonable effort from lsp-dart side to support nixos better or is this on me as a user to fix?
one workaround is to find the dart sdk dir manually and set it in .dir-locals.el, but that seems quite involved. One reasonably simple way to find this would be to create a dart project and run (lsp-dart-get-sdk-dir) inside it.
To Reproduce
in a directory containing a nix-shell, .envrc and flutter project:
dir
|--shell.nix
|--.envrc
|--project
|--pubspec.yaml
|--lib/main.dart
|--...
in emacs, using envrc and lsp-dart
(I use doom emacs with :lang (dart +flutter +lsp) and :tools (direnv))
open dir/project/lib/main.dart (activating dart-mode) Expected behavior
dart_analysis_server starts in flutter root
Version
[LSP Dart] 1.24.2 at 2023.09.13 @ Emacs 29.1
[Dart SDK] Dart SDK version: 3.1.0 (stable) (Tue Aug 15 21:33:36 2023 +0000) on "linux_x64"
I thought about setting FLUTTER_ROOT, but that also doesn't work because lsp-dart-get-sdk-dir also doesn't check that variable if it finds the flutter sdk in $PATH
Describe the bug
I've previously had similar issues- #157
Now by debugging (lsp-dart-get-sdk-dir) I've determined the cause of my issues.
(NB that flutter is added to my $PATH via a nix-shell and envrc)
So- if lsp-dart detects that the project root is a flutter project, it tries to find the dart sdk in
(lsp-dart-get-flutter-sdk-dir)/bin/cache/dart-sdk
. Due to how flutter is packaged in nixpkgs though, the dart sdk is not found there.In my case,
(lsp-dart-get-flutter-sdk-dir)
evaluates to "/nix/store/i8r6cbgmrcpzhk3w4fqvvx18qm1y645q-flutter-wrapped/".So in that case an error will be returned and lsp-dart won't try to find the dart sdk from $PATH
What complicated my issue is that one of my project repos didn't contain one flutter project, but a monorepo with multiple flutter projects in subdirectories. In that case, lsp-dart found the dart sdk from my $PATH instead. I was very confused about this, because I didn't get why the analysis server was started in one project but not the other.
Is there anything that can be done without unreasonable effort from lsp-dart side to support nixos better or is this on me as a user to fix?
one workaround is to find the dart sdk dir manually and set it in .dir-locals.el, but that seems quite involved. One reasonably simple way to find this would be to create a dart project and run (lsp-dart-get-sdk-dir) inside it.
To Reproduce
in a directory containing a nix-shell, .envrc and flutter project:
with a shell.nix like the following:
in emacs, using envrc and lsp-dart
(I use doom emacs with
:lang (dart +flutter +lsp)
and:tools (direnv)
)open
dir/project/lib/main.dart
(activating dart-mode)Expected behavior
dart_analysis_server starts in flutter root
Version
[LSP Dart] 1.24.2 at 2023.09.13 @ Emacs 29.1
[Dart SDK] Dart SDK version: 3.1.0 (stable) (Tue Aug 15 21:33:36 2023 +0000) on "linux_x64"
[Flutter SDK] /nix/store/i8r6cbgmrcpzhk3w4fqvvx18qm1y645q-flutter-wrapped/
[Flutter project] true
[Project entrypoint] /home/nanashi/Documents/projects//lib/main.dart
The text was updated successfully, but these errors were encountered: