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) } }