Skip to content

Commit

Permalink
plugins/flutter-tools: init
Browse files Browse the repository at this point in the history
  • Loading branch information
khaneliman authored and nix-infra-bot committed Dec 27, 2024
1 parent 7500425 commit 9a08553
Show file tree
Hide file tree
Showing 2 changed files with 373 additions and 0 deletions.
263 changes: 263 additions & 0 deletions plugins/by-name/flutter-tools/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
{ lib, ... }:
let
inherit (lib) types;
inherit (lib.nixvim)
defaultNullOpts
literalLua
mkNullOrOption'
mkNullOrOption
;
in
lib.nixvim.neovim-plugin.mkNeovimPlugin {
name = "flutter-tools";
packPathName = "flutter-tools.nvim";
package = "flutter-tools-nvim";

maintainers = [ lib.maintainers.khaneliman ];

settingsOptions = {
ui = {
border = defaultNullOpts.mkNullable (with types; either str (listOf (maybeRaw str))) "rounded" ''
The border type to use for all floating windows, the same options/formats used for
`:h nvim_open_win` e.g. `"single"` | `"shadow"` | `[<list-of-eight-chars>]`.
'';
};
decorations = {
statusline = {
app_version = defaultNullOpts.mkBool false ''
Set to true to be able use the `flutter_tools_decorations.app_version` in your statusline.
This will show the current version of the flutter app from the `pubspec.yaml` file.
'';

device = defaultNullOpts.mkBool false ''
Set to true to be able use the `flutter_tools_decorations.device` in your statusline.
This will show the currently running device if an application was started with a specific
device.
'';

project_config = defaultNullOpts.mkBool false ''
Set to true to be able use the `flutter_tools_decorations.project_config` in your
statusline this will show the currently selected project configuration.
'';
};
};

debugger = {
enabled = defaultNullOpts.mkBool false ''
Integrate with nvim `dap` + install dart code debugger.
'';

exception_breakpoints = defaultNullOpts.mkListOf types.anything [ ] ''
If empty `dap` will not stop on any exceptions, otherwise it will stop on those specified.
See `|:help dap.set_exception_breakpoints()|` for more info.
'';

evaluate_to_string_in_debug_views = defaultNullOpts.mkBool true ''
Whether to call `toString()` on objects in debug views like hovers and the variables list.
Invoking `toString()` has a performance cost and may introduce side-effects, although users
may expected this functionality.
'';

register_configurations =
defaultNullOpts.mkRaw
''
function(paths)
require("dap").configurations.dart = {
--put here config that you would find in .vscode/launch.json
}
-- If you want to load .vscode launch.json automatically run the following:
-- require("dap.ext.vscode").load_launchjs()
end
''
''
Function to register `dap` configurations.
'';
};

flutter_path = defaultNullOpts.mkStr null ''
Path to the `flutter` executable.
This takes priority over the lookup
'';

flutter_lookup_cmd = mkNullOrOption' {
example = "dirname $(which flutter)";
description = ''
The command used to locate the flutter path.
'';
type = types.str;
};

root_patterns = defaultNullOpts.mkListOf types.str [ ".git" "pubspec.yaml" ] ''
Patterns to find the root of your flutter project.
'';

fvm = defaultNullOpts.mkBool false ''
Takes priority over path, uses `<workspace>/.fvm/flutter_sdk` if enabled.
'';

widget_guides = {
enabled = defaultNullOpts.mkBool false ''
Whether to enable widget guides.
'';
};

closing_tags = {
highlight = defaultNullOpts.mkStr "ErrorMsg" ''
Highlight group for the closing tag.
'';

prefix = defaultNullOpts.mkStr ">" ''
Haracter to use for close tag e.g. > Widget.
'';

priority = defaultNullOpts.mkUnsignedInt 10 ''
Priority of virtual text in current line.
'';

enabled = defaultNullOpts.mkBool true ''
Consider to configure this when there is a possibility of multiple virtual text items in one
line.
See `priority` option in `|:help nvim_buf_set_extmark|` for more info.
'';
};

dev_log = {
enabled = defaultNullOpts.mkBool true ''
Whether to enable `dev_log`.
'';

filter = defaultNullOpts.mkRaw null ''
Optional callback to filter the log.
Takes a `log_line` as string argument; returns a boolean or `nil`.
The `log_line` is only added to the output if the function returns `true`.
'';

notify_errors = defaultNullOpts.mkBool false ''
If there is an error whilst running then notify the user.
'';

open_cmd = defaultNullOpts.mkStr "15split" ''
Command to use to open the log buffer.
'';

focus_on_open = defaultNullOpts.mkBool true ''
Focus on the newly opened log window.
'';
};

dev_tools = {
autostart = defaultNullOpts.mkBool false ''
Autostart devtools server if not detected.
'';

auto_open_browser = defaultNullOpts.mkBool false ''
Automatically opens devtools in the browser.
'';
};

outline = {
open_cmd = defaultNullOpts.mkStr "30vnew" ''
Command to use to open the outline buffer.
'';

auto_open = defaultNullOpts.mkBool false ''
If `true` this will open the outline automatically when it is first populated.
'';
};

lsp = {
color = {
enabled = defaultNullOpts.mkBool false ''
Whether or not to highlight color variables at all, only supported on flutter >= 2.10.
'';

background = defaultNullOpts.mkBool false ''
Whether to highlight the background.
'';

background_color = defaultNullOpts.mkAttrsOf' {
type = types.ints.unsigned;
pluginDefault = null;
example = {
r = 19;
g = 17;
b = 24;
};
description = ''
Required when the background is transparent.
'';
};

foreground = defaultNullOpts.mkBool false ''
Whether to highlight the foreground.
'';

virtual_text = defaultNullOpts.mkBool true ''
Whether to show the highlight using virtual text.
'';

virtual_text_str = defaultNullOpts.mkStr "■" ''
The virtual text character to highlight.
'';
};

on_attach = mkNullOrOption types.rawLua ''
The function to call when attaching the language server.
'';

capabilities = mkNullOrOption' {
type = with types; attrsOf anything;
example = literalLua ''
function(config)
config.specificThingIDontWant = false
return config
end
'';
description = ''
LSP capabilities.
You can use the ones of `lsp_status` or you can specify a function to deactivate or change
or control how the config is created.
'';
};

settings = mkNullOrOption' {
type = with types; attrsOf anything;
example = {
showTodos = true;
completeFunctionCalls = true;
analysisExcludedFolders = [ "<path-to-flutter-sdk-packages>" ];
renameFilesWithClasses = "prompt";
enableSnippets = true;
updateImportsOnRename = true;
};
description = ''
LSP settings.
See [here](https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/tool/lsp_spec/README.md#client-workspace-configuration)
the link below for details on each option.
'';
};
};
};

settingsExample = {
debugger = {
enabled = true;
run_via_dap = true;
};
widget_guides.enabled = false;
closing_tags.highlight = "Comment";
lsp = {
on_attach = null;
capabilities.__raw = ''
function(config)
config.documentFormattingProvider = false
return config
end
'';
settings = {
enableSnippets = false;
updateImportsOnRename = true;
};
};
};
}
110 changes: 110 additions & 0 deletions tests/test-sources/plugins/by-name/flutter-tools/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
{
empty = {
plugins.flutter-tools.enable = true;
};

defaults = {
plugins.flutter-tools = {
enable = true;

settings = {
ui = {
border = "rounded";
};
decorations = {
statusline = {
app_version = false;
device = false;
project_config = false;
};
};
debugger = {
enabled = false;
exception_breakpoints = [ ];
evaluate_to_string_in_debug_views = true;
register_configurations.__raw = ''
function(paths)
require("dap").configurations.dart = {
--put here config that you would find in .vscode/launch.json
}
-- If you want to load .vscode launch.json automatically run the following:
-- require("dap.ext.vscode").load_launchjs()
end
'';
};
flutter_path = null;
flutter_lookup_cmd = null;
root_patterns = [
".git"
"pubspec.yaml"
];
fvm = false;
widget_guides = {
enabled = false;
};
closing_tags = {
highlight = "ErrorMsg";
prefix = ">";
priority = 10;
enabled = true;
};
dev_log = {
enabled = true;
filter = null;
notify_errors = false;
open_cmd = "15split";
focus_on_open = true;
};
dev_tools = {
autostart = false;
auto_open_browser = false;
};
outline = {
open_cmd = "30vnew";
auto_open = false;
};
lsp = {
color = {
enabled = false;
background = false;
background_color = null;
foreground = false;
virtual_text = true;
virtual_text_str = "■";
};
on_attach = null;
capabilities = null;
settings = { };
};
};
};
};

example = {
plugins.flutter-tools = {
enable = true;

settings = {
debugger = {
enabled = true;
run_via_dap = true;
};
widget_guides.enabled = false;
closing_tags.highlight = "Comment";
lsp = {
on_attach = null;
capabilities.__raw = ''
function(config)
config.documentFormattingProvider = false
return config
end
'';
settings = {
enableSnippets = false;
updateImportsOnRename = true;
};
};
};
};
};
}

0 comments on commit 9a08553

Please sign in to comment.