[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/nvim-flutter/flutter-tools.nvim/main/lua/flutter-tools.lua [Back]  [Original]

local M = {}

local lazy = require("flutter-tools.lazy")

local commands = lazy.require("flutter-tools.commands") ---@module "flutter-tools.commands"
local config = lazy.require("flutter-tools.config") ---@module "flutter-tools.config"
local dev_tools = lazy.require("flutter-tools.dev_tools") ---@module "flutter-tools.dev_tools"
local dap = lazy.require("flutter-tools.dap") ---@module "flutter-tools.dap"
local decorations = lazy.require("flutter-tools.decorations") ---@module "flutter-tools.decorations"
local guides = lazy.require("flutter-tools.guides") ---@module "flutter-tools.guides"
local log = lazy.require("flutter-tools.log") ---@module "flutter-tools.log"
local lsp = lazy.require("flutter-tools.lsp") ---@module "flutter-tools.lsp"
local outline = lazy.require("flutter-tools.outline") ---@module "flutter-tools.outline"
local devices = lazy.require("flutter-tools.devices") ---@module "flutter-tools.devices"
local utils = lazy.require("flutter-tools.utils") ---@module "flutter-tools.utils"

local api = vim.api

local command = function(name, callback, opts)
  api.nvim_create_user_command(name, callback, opts or {})
end

local function setup_commands()
  -- Commands
  command("FlutterRun", function(data) commands.run_command(data.args) end, { nargs = "*" })
  command("FlutterDebug", function(data) commands.run_command(data.args, true) end, { nargs = "*" })
  command("FlutterLspRestart", lsp.restart)
  command("FlutterAttach", function(data) commands.attach(data.args) end, { nargs = "*" })
  command("FlutterDetach", commands.detach)
  command("FlutterReload", commands.reload)
  command("FlutterRestart", commands.restart)
  command("FlutterQuit", commands.quit)
  command("FlutterVisualDebug", commands.visual_debug)
  command("FlutterChangeTargetPlatform", commands.change_target_platform)
  command("FlutterToggleBrightness", commands.brightness)
  -- Lists
  command("FlutterDevices", devices.list_devices)
  command("FlutterEmulators", devices.list_emulators)
  --- Outline
  command("FlutterOutlineOpen", outline.open)
  command("FlutterOutlineToggle", outline.toggle)
  --- Dev tools
  command("FlutterDevTools", dev_tools.start)
  command("FlutterDevToolsActivate", dev_tools.activate)
  command("FlutterCopyProfilerUrl", commands.copy_profiler_url)
  command("FlutterOpenDevTools", commands.open_dev_tools)
  command("FlutterInspectWidget", commands.inspect_widget)
  command("FlutterPubGet", commands.pub_get)
  command("FlutterPubUpgrade", function(data) commands.pub_upgrade_command(data.args) end, {
    nargs = "*",
  })
  --- Log
  command("FlutterLogClear", log.clear)
  command("FlutterLogToggle", log.toggle)
  --- LSP
  command("FlutterSuper", lsp.dart_lsp_super)
  command("FlutterReanalyze", lsp.dart_reanalyze)
  command("FlutterRename", function() require("flutter-tools.lsp.rename").rename() end)
end

local _setup_started = false

---Initialise various plugin modules
local function start()
  if not _setup_started then
    _setup_started = true
    setup_commands()
    dap.setup(config)
    if config.widget_guides.enabled then guides.setup() end
    if config.decorations then decorations.apply(config.decorations) end
  end
end

local AUGROUP = api.nvim_create_augroup("FlutterToolsGroup", { clear = true })
---Create autocommands for the plugin
local function setup_autocommands()
  local autocmd = api.nvim_create_autocmd

  -- delay plugin setup till we enter a dart file
  autocmd({ "BufEnter" }, {
    group = AUGROUP,
    pattern = { "*.dart", "pubspec.yaml" },
    once = true,
    callback = start,
  })

  if config.lsp.color.enabled then
    autocmd({ "BufEnter", "TextChanged", "InsertLeave" }, {
      group = AUGROUP,
      pattern = { "*.dart" },
      callback = function() lsp.document_color() end,
    })
    -- NOTE: we piggyback of this event to check for when the server is first initialized
    autocmd({ "User" }, {
      group = AUGROUP,
      pattern = utils.events.LSP_ANALYSIS_COMPLETED,
      once = true,
      callback = function() lsp.document_color() end,
    })
  end

  autocmd({ "BufWritePost" }, {
    group = AUGROUP,
    pattern = { "*.dart" },
    callback = function() commands.reload(true) end,
  })
  autocmd({ "BufWritePost" }, {
    group = AUGROUP,
    pattern = { "*/pubspec.yaml" },
    callback = function() commands.pub_get() end,
  })
  autocmd({ "BufEnter" }, {
    group = AUGROUP,
    pattern = { log.filename },
    callback = function() log.__resurrect() end,
  })
  autocmd({ "VimLeavePre" }, {
    group = AUGROUP,
    pattern = { "*" },
    callback = function() dev_tools.stop() end,
  })
end

---@param opts flutter.ProjectConfig | flutter.ProjectConfig[] Project-specific configuration
function M.setup_project(opts)
  config.setup_project(opts)
  start()
end

---Entry point for this plugin
---@param user_config flutter.Config Configuration options for flutter-tools
function M.setup(user_config)
  config.set(user_config)
  setup_autocommands()
end

return M

Web Proxy Viewer  |  New URL  |  Original Page