| This test checks completion of Go keywords. |
| |
| -- flags -- |
| -ignore_extra_diags |
| -filter_keywords=false |
| |
| -- settings.json -- |
| { |
| "completeUnimported": false, |
| "matcher": "caseInsensitive", |
| "experimentalPostfixCompletions": false |
| } |
| |
| -- keywords.go -- |
| package keywords |
| |
| //@rank("", type),rank("", func),rank("", var),rank("", const),rank("", import) |
| |
| func _() { |
| var test int //@rank(" //", int, interface) |
| var tChan chan int |
| var _ m //@complete(" //", map) |
| var _ f //@complete(" //", func) |
| var _ c //@complete(" //", chan) |
| |
| var _ str //@rank(" //", string, struct) |
| |
| type _ int //@rank(" //", interface, int) |
| |
| type _ str //@rank(" //", struct, string) |
| |
| switch test { |
| case 1: // TODO: trying to complete case here will break because the parser won't return *ast.Ident |
| b //@complete(" //", break) |
| case 2: |
| f //@complete(" //", fallthrough, for) |
| r //@complete(" //", return) |
| d //@complete(" //", default, defer) |
| c //@complete(" //", case, const) |
| } |
| |
| switch test.(type) { |
| case fo: //@complete(":") |
| case int: |
| b //@complete(" //", break) |
| case int32: |
| f //@complete(" //", for) |
| d //@complete(" //", default, defer) |
| r //@complete(" //", return) |
| c //@complete(" //", case, const) |
| } |
| |
| select { |
| case <-tChan: |
| b //@complete(" //", break) |
| c //@complete(" //", case, const) |
| } |
| |
| for index := 0; index < test; index++ { |
| c //@complete(" //", const, continue) |
| b //@complete(" //", break) |
| } |
| |
| for range []int{} { |
| c //@complete(" //", const, continue) |
| b //@complete(" //", break) |
| } |
| |
| // Test function level keywords |
| |
| //Using 2 characters to test because map output order is random |
| sw //@complete(" //", switch) |
| se //@complete(" //", select) |
| |
| f //@complete(" //", for) |
| d //@complete(" //", defer) |
| g //@rank(" //", go),rank(" //", goto) |
| r //@complete(" //", return) |
| i //@complete(" //", if) |
| e //@complete(" //", else) |
| v //@complete(" //", var) |
| c //@complete(" //", const) |
| |
| for i := r //@complete(" //", range) |
| } |
| |
| /* package */ //@item(package, "package", "", "keyword") |
| /* import */ //@item(import, "import", "", "keyword") |
| /* func */ //@item(func, "func", "", "keyword") |
| /* type */ //@item(type, "type", "", "keyword") |
| /* var */ //@item(var, "var", "", "keyword") |
| /* const */ //@item(const, "const", "", "keyword") |
| /* break */ //@item(break, "break", "", "keyword") |
| /* default */ //@item(default, "default", "", "keyword") |
| /* case */ //@item(case, "case", "", "keyword") |
| /* defer */ //@item(defer, "defer", "", "keyword") |
| /* go */ //@item(go, "go", "", "keyword") |
| /* for */ //@item(for, "for", "", "keyword") |
| /* if */ //@item(if, "if", "", "keyword") |
| /* else */ //@item(else, "else", "", "keyword") |
| /* switch */ //@item(switch, "switch", "", "keyword") |
| /* select */ //@item(select, "select", "", "keyword") |
| /* fallthrough */ //@item(fallthrough, "fallthrough", "", "keyword") |
| /* continue */ //@item(continue, "continue", "", "keyword") |
| /* return */ //@item(return, "return", "", "keyword") |
| /* goto */ //@item(goto, "goto", "", "keyword") |
| /* struct */ //@item(struct, "struct", "", "keyword") |
| /* interface */ //@item(interface, "interface", "", "keyword") |
| /* map */ //@item(map, "map", "", "keyword") |
| /* chan */ //@item(chan, "chan", "", "keyword") |
| /* range */ //@item(range, "range", "", "keyword") |
| /* string */ //@item(string, "string", "", "type") |
| /* int */ //@item(int, "int", "", "type") |
| |
| -- accidental_keywords.go -- |
| package keywords |
| |
| // non-matching candidate - shouldn't show up as completion |
| var apple = "apple" |
| |
| func _() { |
| foo.bar() // insert some extra statements to exercise our AST surgery |
| variance := 123 //@item(kwVariance, "variance", "int", "var") |
| foo.bar() |
| println(var) //@complete(")", kwVariance) |
| } |
| |
| func _() { |
| foo.bar() |
| var s struct { variance int } //@item(kwVarianceField, "variance", "int", "field") |
| foo.bar() |
| s.var //@complete(" //", kwVarianceField) |
| } |
| |
| func _() { |
| channel := 123 //@item(kwChannel, "channel", "int", "var") |
| chan //@complete(" //", kwChannel) |
| foo.bar() |
| } |
| |
| func _() { |
| foo.bar() |
| var typeName string //@item(kwTypeName, "typeName", "string", "var") |
| foo.bar() |
| type //@complete(" //", kwTypeName) |
| } |
| -- empty_select.go -- |
| package keywords |
| |
| func _() { |
| select { |
| c //@complete(" //", case) |
| } |
| } |
| -- empty_switch.go -- |
| package keywords |
| |
| func _() { |
| switch { |
| //@complete("", case, default) |
| } |
| |
| switch test.(type) { |
| d //@complete(" //", default) |
| } |
| } |