Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
214 changes: 179 additions & 35 deletions languages/dart/runnables.scm
Original file line number Diff line number Diff line change
@@ -1,72 +1,194 @@
; Dart main — matches dart: SDK imports.
; Since `dart format` places dart: imports first, the @_import capture
; position will be earlier than flutter/test imports, so specific patterns
; (flutter-main, flutter-test-main, etc.) overwrite this when they match.
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "^\"dart:"))))))
(function_signature
name: (_) @run
(#eq? @run "main"))
(#set! tag dart-main))

; Dart main for parse errors (ERROR root).
(ERROR
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "^\"dart:"))))))
(function_signature
name: (_) @run
(#eq? @run "main"))
(#set! tag dart-main))

; Flutter main
((import_or_export
(library_import
(import_specification
("import"
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:flutter/(material|widgets|cupertino).dart"))))))
(function_signature
name: (_) @run
(#eq? @run "main"))
(#set! tag flutter-main))

; Flutter main (parse error fallback)
(ERROR
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:flutter/(material|widgets|cupertino).dart")
(#not-match? @_import "package:flutter_test/flutter_test.dart")
(#not-match? @_import "package:test/test.dart")))))))
((function_signature
name: (_) @run)
(#match? @_import "package:flutter/(material|widgets|cupertino).dart"))))))
(function_signature
name: (_) @run
(#eq? @run "main"))
(#set! tag flutter-main))

; Flutter test main
((import_or_export
(library_import
(import_specification
("import"
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:flutter_test/flutter_test.dart"))))))
(function_signature
name: (_) @run
(#eq? @run "main"))
(#set! tag flutter-test-main))

; Flutter test main (parse error fallback)
(ERROR
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:flutter_test/flutter_test.dart")))))))
((function_signature
name: (_) @run)
(#match? @_import "package:flutter_test/flutter_test.dart"))))))
(function_signature
name: (_) @run
(#eq? @run "main"))
(#set! tag flutter-test-main))

; Flutter test group (block body: void main() { group(...) })
; Arrow-body variant removed: when main() => group(...), both identifiers
; share the same line, causing group to overwrite the more useful test-main tag.
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:flutter_test/flutter_test.dart"))))))
(function_body
(block
(expression_statement
((identifier) @run
(#eq? @run "group")))))
(#set! tag flutter-test-group))

; Flutter test single (block body)
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:flutter_test/flutter_test.dart"))))))
(function_body
(block
(expression_statement
(selector
(argument_part
(arguments
(argument
(function_expression
(function_expression_body
(block
(expression_statement
((identifier) @run
(#eq? @run "test")))))))))))))
(#set! tag flutter-test-single))

; Flutter test single (arrow body: void main() => group("name", () { test(...) }))
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:flutter_test/flutter_test.dart"))))))
(function_body
(selector
(argument_part
(arguments
(argument
(function_expression
(function_expression_body
(block
(expression_statement
((identifier) @run
(#eq? @run "test")))))))))))
(#set! tag flutter-test-single))

; Dart test file
((import_or_export
(library_import
(import_specification
("import"
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:test/test.dart")))))))
((function_signature
name: (_) @run)
(#match? @_import "package:test/test.dart"))))))
(function_signature
name: (_) @run
(#eq? @run "main"))
(#set! tag dart-test-file))

; Dart test group
((import_or_export
(library_import
(import_specification
("import"
; Dart test group (block body: void main() { group(...) })
; Arrow-body variant removed: same reason as flutter-test-group.
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:test/test.dart")))))))
(#match? @_import "package:test/test.dart"))))))
(function_body
(block
(expression_statement
((identifier) @run
(#eq? @run "group")))))
(#set! tag dart-test-group))

; Dart test single
((import_or_export
(library_import
(import_specification
("import"
; Dart test single (block body)
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:test/test.dart")))))))
(#match? @_import "package:test/test.dart"))))))
(function_body
(block
(expression_statement
Expand All @@ -81,3 +203,25 @@
((identifier) @run
(#eq? @run "test")))))))))))))
(#set! tag dart-test-single))

; Dart test single (arrow body)
(program
(import_or_export
(library_import
(import_specification
(configurable_uri
(uri
(string_literal) @_import
(#match? @_import "package:test/test.dart"))))))
(function_body
(selector
(argument_part
(arguments
(argument
(function_expression
(function_expression_body
(block
(expression_statement
((identifier) @run
(#eq? @run "test")))))))))))
(#set! tag dart-test-single))
30 changes: 30 additions & 0 deletions languages/dart/tasks.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
[
{
"label": "dart run $ZED_STEM",
"command": "dart",
"args": ["run", "$ZED_FILE"],
"tags": ["dart-main"]
},
{
"label": "flutter run",
"command": "flutter",
Expand All @@ -23,6 +29,30 @@
"args": ["test", "$ZED_FILE"],
"tags": ["flutter-test-main"]
},
{
"label": "flutter test group $ZED_STEM",
"command": "flutter",
"args": ["test", "\"$ZED_FILE?line=$ZED_ROW\""],
"tags": ["flutter-test-group"]
},
{
"label": "fvm flutter test group $ZED_STEM",
"command": "fvm flutter",
"args": ["test", "\"$ZED_FILE?line=$ZED_ROW\""],
"tags": ["flutter-test-group"]
},
{
"label": "flutter test single $ZED_STEM",
"command": "flutter",
"args": ["test", "\"$ZED_FILE?line=$ZED_ROW\""],
"tags": ["flutter-test-single"]
},
{
"label": "fvm flutter test single $ZED_STEM",
"command": "fvm flutter",
"args": ["test", "\"$ZED_FILE?line=$ZED_ROW\""],
"tags": ["flutter-test-single"]
},
{
"label": "dart test file $ZED_STEM",
"command": "dart",
Expand Down
Loading