--- /dev/null
+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 wont 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")
+/* var */ //@item(var, "var", "", "keyword")
+/* const */ //@item(const, "const", "", "keyword")
+/* goto */ //@item(goto, "goto", "", "keyword")
+/* struct */ //@item(struct, "struct", "", "keyword")
+/* interface */ //@item(interface, "interface", "", "keyword")
+/* map */ //@item(map, "map", "", "keyword")
+/* func */ //@item(func, "func", "", "keyword")
+/* chan */ //@item(chan, "chan", "", "keyword")
+/* range */ //@item(range, "range", "", "keyword")