diff --git a/gopls/internal/golang/completion/postfix_snippets.go b/gopls/internal/golang/completion/postfix_snippets.go index 641fe8746eb..db2877fa85a 100644 --- a/gopls/internal/golang/completion/postfix_snippets.go +++ b/gopls/internal/golang/completion/postfix_snippets.go @@ -173,12 +173,10 @@ for {{.VarName .KeyType "k" | .Placeholder}}, {{.VarName .ElemType "v" | .Placeh {{- end}}`, }, { label: "clear", - details: "clear map contents", - body: `{{if and (eq .Kind "map") .StmtOK -}} -{{$k := (.VarName .KeyType "k")}}for {{$k}} := range {{.X}} { - delete({{.X}}, {{$k}}) -} -{{end}}`, + details: "clear contents", + body: `{{if and (eq .Kind "map" "slice") .StmtOK -}} +clear({{.X}}) +{{- end}}`, }, { label: "keys", details: "create slice of keys", diff --git a/gopls/internal/test/integration/completion/postfix_snippet_test.go b/gopls/internal/test/integration/completion/postfix_snippet_test.go index 884be420835..1753374f15f 100644 --- a/gopls/internal/test/integration/completion/postfix_snippet_test.go +++ b/gopls/internal/test/integration/completion/postfix_snippet_test.go @@ -234,10 +234,26 @@ package foo func _() { var foo map[string]int - for k := range foo { - delete(foo, k) + clear(foo) } +`, + }, + { + name: "slice_clear", + before: ` +package foo +func _() { + var foo []int + foo.clear +} +`, + after: ` +package foo + +func _() { + var foo []int + clear(foo) } `, }, diff --git a/gopls/internal/test/marker/testdata/completion/postfix.txt b/gopls/internal/test/marker/testdata/completion/postfix.txt index 9b54b578f4c..cc9c54a7b68 100644 --- a/gopls/internal/test/marker/testdata/completion/postfix.txt +++ b/gopls/internal/test/marker/testdata/completion/postfix.txt @@ -39,6 +39,7 @@ func _() { func _() { /* append! */ //@item(postfixAppend, "append!", "append and re-assign slice", "snippet") + /* clear! */ //@item(postfixClearSlice, "clear!", "clear contents", "snippet") /* copy! */ //@item(postfixCopy, "copy!", "duplicate slice", "snippet") /* for! */ //@item(postfixFor, "for!", "range over slice by index", "snippet") /* forr! */ //@item(postfixForr, "forr!", "range over slice by index and value", "snippet") @@ -52,10 +53,11 @@ func _() { /* ifnotnil! */ //@item(postfixIfNotNil, "ifnotnil!", "if expr != nil", "snippet") var foo []int - foo. //@complete(" //", postfixAppend, postfixCopy, postfixFor, postfixForr, postfixIfNotNil, postfixLast, postfixLen, postfixPrint, postfixRange, postfixReverse, postfixSort, postfixVar) + foo. //@complete(" //", postfixAppend, postfixClearSlice, postfixCopy, postfixFor, postfixForr, postfixIfNotNil, postfixLast, postfixLen, postfixPrint, postfixRange, postfixReverse, postfixSort, postfixVar) foo = nil foo.append //@snippet(" //", postfixAppend, "foo = append(foo, $0)") + foo.clear //@snippet(" //", postfixClearSlice, "clear(foo)") foo.copy //snippet(" //", postfixCopy, "fooCopy := make([]int, len(foo))\ncopy($fooCopy, foo)\n") foo.fo //@snippet(" //", postfixFor, "for ${1:} := range foo {\n\t$0\n}") foo.forr //@snippet(" //", postfixForr, "for ${1:}, ${2:} := range foo {\n\t$0\n}") @@ -73,7 +75,7 @@ func _() { /* for! */ //@item(postfixForMap, "for!", "range over map by key", "snippet") /* forr! */ //@item(postfixForrMap, "forr!", "range over map by key and value", "snippet") /* range! */ //@item(postfixRangeMap, "range!", "range over map", "snippet") - /* clear! */ //@item(postfixClear, "clear!", "clear map contents", "snippet") + /* clear! */ //@item(postfixClear, "clear!", "clear contents", "snippet") /* keys! */ //@item(postfixKeys, "keys!", "create slice of keys", "snippet") var foo map[int]int @@ -84,7 +86,7 @@ func _() { foo.fo //@snippet(" //", postfixFor, "for ${1:} := range foo {\n\t$0\n}") foo.forr //@snippet(" //", postfixForr, "for ${1:}, ${2:} := range foo {\n\t$0\n}") foo.rang //@snippet(" //", postfixRange, "for ${1:}, ${2:} := range foo {\n\t$0\n}") - foo.clear //@snippet(" //", postfixClear, "for k := range foo {\n\tdelete(foo, k)\n}\n") + foo.clear //@snippet(" //", postfixClear, "clear(foo)") foo.keys //@snippet(" //", postfixKeys, "keys := make([]int, 0, len(foo))\nfor k := range foo {\n\tkeys = append(keys, k)\n}\n") }