fix(flutter-tools): bug where dart lsp is not found

This commit is contained in:
Ching Pei Yang 2023-06-25 14:09:12 +02:00
parent efe5905c41
commit b4eaabea95
5 changed files with 70 additions and 9 deletions

View file

@ -73,6 +73,7 @@ with lib; let
"diffview-nvim" "diffview-nvim"
"todo-comments" "todo-comments"
"flutter-tools" "flutter-tools"
"flutter-tools-patched"
"hop-nvim" "hop-nvim"
"leap-nvim" "leap-nvim"
"modes-nvim" "modes-nvim"

View file

@ -25,13 +25,13 @@ inputs: {
// extraSpecialArgs; // extraSpecialArgs;
}; };
buildPlug = name: buildPlug = {pname, ...} @ args:
buildVimPluginFrom2Nix rec { assert lib.asserts.assertMsg (pname != "nvim-treesitter") "Use buildTreesitterPlug for building nvim-treesitter.";
pname = name; buildVimPluginFrom2Nix (args
// {
version = "master"; version = "master";
src = assert lib.asserts.assertMsg (name != "nvim-treesitter") "Use buildTreesitterPlug for building nvim-treesitter."; src = getAttr pname inputs;
getAttr pname inputs; });
};
buildTreesitterPlug = grammars: vimPlugins.nvim-treesitter.withPlugins (_: grammars); buildTreesitterPlug = grammars: vimPlugins.nvim-treesitter.withPlugins (_: grammars);
@ -45,7 +45,13 @@ inputs: {
( (
if (plug == "nvim-treesitter") if (plug == "nvim-treesitter")
then (buildTreesitterPlug vimOptions.treesitter.grammars) then (buildTreesitterPlug vimOptions.treesitter.grammars)
else (buildPlug plug) else if (plug == "flutter-tools-patched")
then
(buildPlug {
pname = "flutter-tools";
patches = [../patches/flutter-tools.patch];
})
else (buildPlug {pname = plug;})
) )
else plug else plug
)) ))

View file

@ -35,7 +35,10 @@ in {
}) })
(mkIf (ftcfg.enable) { (mkIf (ftcfg.enable) {
vim.startPlugins = ["flutter-tools"]; vim.startPlugins =
if ftcfg.enableNoResolvePatch
then ["flutter-tools-patched"]
else ["flutter-tools"];
vim.luaConfigRC.flutter-tools = nvim.dag.entryAnywhere '' vim.luaConfigRC.flutter-tools = nvim.dag.entryAnywhere ''
require('flutter-tools').setup { require('flutter-tools').setup {

View file

@ -56,6 +56,16 @@ in {
default = config.vim.languages.enableLSP; default = config.vim.languages.enableLSP;
}; };
enableNoResolvePatch = mkOption {
description = ''
Patch flutter-tools so that it doesn't resolve symlinks when detecting flutter path.
This is required if you want to use a flutter package built with nix.
If you are using a flutter SDK installed from a different source and encounter the error "`dart` missing from PATH", disable this option.
'';
type = types.bool;
default = true;
};
color = { color = {
enable = mkEnableOption "Whether or mot to highlight color variables at all"; enable = mkEnableOption "Whether or mot to highlight color variables at all";

View file

@ -0,0 +1,41 @@
diff --git a/lua/flutter-tools/executable.lua b/lua/flutter-tools/executable.lua
index 3807a4f..3345760 100644
--- a/lua/flutter-tools/executable.lua
+++ b/lua/flutter-tools/executable.lua
@@ -31,12 +31,12 @@ local function _dart_sdk_root(paths)
end
if utils.executable("flutter") then
- local flutter_path = fn.resolve(fn.exepath("flutter"))
+ local flutter_path = fn.exepath("flutter")
local flutter_bin = fn.fnamemodify(flutter_path, ":h")
return path.join(flutter_bin, dart_sdk)
end
- if utils.executable("dart") then return fn.resolve(fn.exepath("dart")) end
+ if utils.executable("dart") then return fn.exepath("dart") end
return ""
end
@@ -50,10 +50,10 @@ end
---Get paths for flutter and dart based on the binary locations
---@return table<string, string>
local function get_default_binaries()
- local flutter_bin = fn.resolve(fn.exepath("flutter"))
+ local flutter_bin = fn.exepath("flutter")
return {
flutter_bin = flutter_bin,
- dart_bin = fn.resolve(fn.exepath("dart")),
+ dart_bin = fn.exepath("dart"),
flutter_sdk = _flutter_sdk_root(flutter_bin),
}
end
@@ -119,7 +119,7 @@ function M.get(callback)
end
if config.flutter_path then
- local flutter_path = fn.resolve(config.flutter_path)
+ local flutter_path = config.flutter_path
_paths = { flutter_bin = flutter_path, flutter_sdk = _flutter_sdk_root(flutter_path) }
_paths.dart_sdk = _dart_sdk_root(_paths)
_paths.dart_bin = _flutter_sdk_dart_bin(_paths.flutter_sdk)