dart-lang / code_builder

A fluent API for generating valid Dart source code
https://pub.dev/packages/code_builder
BSD 3-Clause "New" or "Revised" License
423 stars 66 forks source link

how can i create switch statement? when write Code("case A: "), i meet 'case' can't be used as an identifier because it's a keyword. #430

Closed BurnBury closed 9 months ago

BurnBury commented 9 months ago

i plan to generate code like this

bool validate(bean) { final type = bean.runtimeType; late final BeanChecker checker; switch (type) { case A: checker = AChecker(); break; default: checker = DefaultChecker(); break; } return checker.check(bean); }

and here is my generator Code:

Method((builder) { builder ..name = "validate" ..returns = Reference("bool") ..requiredParameters.add( Parameter( ((builder) { builder ..name = "bean" ..named = false; }), ), ) ..annotations.add(Reference("override")) ..body = Block.of([ declareFinal("type").assign(Reference("bean.runtimeType")).statement, declareFinal("checker", type: Reference("BeanChecker"), late: true).statement, Code("swicth(type)"), Code("{"), Code("case A:"), Reference("checker").assign(Reference("AChecker")).statement, Code("break;"), Code("default:"), Reference("checker").assign(Reference("DefaultChecker")).statement, Code("break;"), Code("}"), Reference("checker").returned.statement, ]); })

but i meet this error

line 5, column 1 of .: 'case' can't be used as an identifier because it's a keyword. ╷ 5 │ case A: │ ^^^^ ╵ line 5, column 1 of .: Expected to find ';'. ╷ 5 │ case A: │ ^^^^ ╵ line 5, column 1 of .: Expected a statement. ╷ 5 │ case A: │ ^^^^ ╵ line 7, column 1 of .: A break statement can't be used outside of a loop or switch statement. ╷ 7 │ break; │ ^^^^^ ╵ line 8, column 1 of .: 'default' can't be used as an identifier because it's a keyword. ╷ 8 │ default: │ ^^^^^^^ ╵ line 8, column 1 of .: Expected to find ';'. ╷ 8 │ default: │ ^^^^^^^ ╵ line 8, column 1 of .: Expected a statement. ╷ 8 │ default: │ ^^^^^^^ ╵ line 8, column 8 of .: Expected an identifier. ╷ 8 │ default: │ ^ ╵ line 8, column 8 of .: Unexpected text ';'. ╷ 8 │ default: │ ^ ╵ line 10, column 1 of .: A break statement can't be used outside of a loop or switch statement. ╷ 10 │ break;