Skip to content

Commit 2f9db8b

Browse files
authored
feat: open dev tools when running in debug mode (#419)
* feat: open dev tools when running in debug mode * fix: update token * fixup! fix: update token * fix: update formatting * chore: update checkout action to v4
1 parent 85492be commit 2f9db8b

File tree

7 files changed

+49
-26
lines changed

7 files changed

+49
-26
lines changed

.github/workflows/contributing.yml

+3-4
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ jobs:
66
name: Check codestyle
77
runs-on: ubuntu-latest
88
steps:
9-
- uses: actions/checkout@v3
10-
with:
11-
token: ${{ secrets.WORKFLOW_ACCESS_TOKEN }}
9+
- uses: actions/checkout@v4
1210
- uses: JohnnyMorganz/stylua-action@v2
1311
with:
14-
token: ${{ secrets.WORKFLOW_ACCESS_TOKEN }}
12+
token: ${{ secrets.GITHUB_TOKEN }}
13+
version: latest
1514
args: --color always --check .

.github/workflows/formatting.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
stylua:
1111
runs-on: ubuntu-latest
1212
steps:
13-
- uses: actions/checkout@v3
13+
- uses: actions/checkout@v4
1414
with:
1515
token: ${{ secrets.WORKFLOW_ACCESS_TOKEN }}
1616

.github/workflows/release.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
os: [ ubuntu-latest ]
1414
runs-on: ${{ matrix.os }}
1515
steps:
16-
- uses: actions/checkout@v3
16+
- uses: actions/checkout@v4
1717
- name: Install Neovim
1818
shell: bash
1919
run: |
@@ -34,7 +34,7 @@ jobs:
3434
needs: tests
3535
if: ${{ github.ref == 'refs/heads/main' }}
3636
steps:
37-
- uses: actions/checkout@v3
37+
- uses: actions/checkout@v4
3838
- name: panvimdoc
3939
uses: kdheepak/panvimdoc@main
4040
with:
@@ -65,7 +65,7 @@ jobs:
6565
package-name: flutter-tools.nvim
6666
# extra-files: |
6767
# lua/flutter-tools/core/config.lua
68-
- uses: actions/checkout@v3
68+
- uses: actions/checkout@v4
6969
- name: tag stable versions
7070
if: ${{ steps.release.outputs.release_created }}
7171
run: |

ftplugin/dart/init.lua

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
-- See section 'DISABLING' in :h ftplugin
2-
if vim.b.flutter_tools_did_ftplugin then
3-
return
4-
end
2+
if vim.b.flutter_tools_did_ftplugin then return end
53
vim.b.flutter_tools_did_ftplugin = 1
64

75
require("flutter-tools.lsp").attach()

lua/flutter-tools/dev_tools.lua

+26-15
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,8 @@ local function try_get_profiler_url_chrome(data)
4141
return data:match("(ws%:%/%/127%.0%.0%.1%:%d+/.+/ws)$")
4242
end
4343

44-
function M.start_browser()
45-
local auto_open_browser = config.dev_tools.auto_open_browser
46-
if not auto_open_browser then return end
47-
48-
local url = M.get_profiler_url()
49-
if not url then return end
50-
44+
---@param url string
45+
local function open_dev_tools(url)
5146
local open_command = utils.open_command()
5247
if not open_command then
5348
return ui.notify(
@@ -59,10 +54,27 @@ function M.start_browser()
5954
Job:new({
6055
command = open_command,
6156
args = { url },
62-
detached = true
57+
detached = true,
6358
}):start()
6459
end
6560

61+
local function start_browser()
62+
local auto_open_browser = config.dev_tools.auto_open_browser
63+
if not auto_open_browser then return end
64+
local url = M.get_profiler_url()
65+
if not url then return end
66+
open_dev_tools(url)
67+
end
68+
69+
function M.open_dev_tools()
70+
local url = M.get_profiler_url()
71+
if url then
72+
open_dev_tools(url)
73+
else
74+
ui.notify("No active devtools server found")
75+
end
76+
end
77+
6678
function M.handle_log(data)
6779
if devtools_profiler_url or (profiler_url and devtools_url) then return end
6880

@@ -92,7 +104,7 @@ function M.register_profiler_url(url)
92104
end
93105

94106
function M.handle_devtools_available()
95-
M.start_browser()
107+
start_browser()
96108
ui.notify("Detected devtools url, execute FlutterCopyProfilerUrl to copy it")
97109
end
98110

@@ -120,12 +132,8 @@ local function handle_start(_, data, _)
120132
if not json.params.host or not json.params.port then return end
121133

122134
devtools_url = string.format("http://%s:%s", json.params.host, json.params.port)
123-
M.start_browser()
124-
ui.notify(
125-
string.format("Serving DevTools at %s", devtools_url),
126-
ui.INFO,
127-
{ timeout = 10000 }
128-
)
135+
start_browser()
136+
ui.notify(string.format("Serving DevTools at %s", devtools_url), ui.INFO, { timeout = 10000 })
129137
end
130138

131139
---Handler errors whilst opening dev tools
@@ -224,4 +232,7 @@ function M.on_flutter_shutdown()
224232
devtools_profiler_url = nil
225233
end
226234

235+
function M.set_devtools_url(url) devtools_url = url end
236+
function M.set_profiler_url(url) profiler_url = url end
237+
227238
return M

lua/flutter-tools/runners/debugger_runner.lua

+4
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ function DebuggerRunner:run(
199199
end
200200

201201
function DebuggerRunner:send(cmd, quiet)
202+
if cmd == "open_dev_tools" then
203+
dev_tools.open_dev_tools()
204+
return
205+
end
202206
local request = command_requests[cmd]
203207
if request ~= nil then
204208
dap.session():request(request)

lua/flutter-tools/runners/vm_service_extensions.lua

+11
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1+
local lazy = require("flutter-tools.lazy")
2+
local dev_tools = lazy.require("flutter-tools.dev_tools") ---@module "flutter-tools.dev_tools"
3+
14
---@class flutter.VmServiceExtensions
25
---@field set_service_extensions_state fun(extension: string, value: string)
36
---@field get_request_params fun(cmd: string): table | nil
47
---@field reset fun()
58
---@field set_isolate_id fun(extension: string, isolate_id: string)
69

10+
local state_key_active_dev_tools_server_address = "ext.flutter.activeDevToolsServerAddress"
11+
local state_key_connected_vm_service_uri = "ext.flutter.connectedVmServiceUri"
12+
713
local service_extensions_state = {}
814
local service_extensions_isolateid = {}
915

@@ -41,6 +47,11 @@ end
4147
return {
4248
set_service_extensions_state = function(extension, value)
4349
if extension and value then service_extensions_state[extension] = value end
50+
if extension == state_key_active_dev_tools_server_address then
51+
dev_tools.set_devtools_url(value)
52+
elseif extension == state_key_connected_vm_service_uri then
53+
dev_tools.set_profiler_url(value)
54+
end
4455
end,
4556

4657
get_request_params = function(cmd)

0 commit comments

Comments
 (0)