internal/lsp: exclude node_modules in the workspace root by default

It is unlikely that users want gopls operating on their node_modules
directories, so we should exclude them by default. If a user wants to
include them, they can override their directory filters setting.

This doesn't exclude *any* directory named "node_modules", so we still
need to implement golang/go#46438 to exclude node_modules completely.

Change-Id: I03c42208e62390dc35e44ac5176422ddf8dc53f7
Reviewed-on: https://go-review.googlesource.com/c/tools/+/347297
Trust: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
diff --git a/gopls/doc/settings.md b/gopls/doc/settings.md
index 8b0ec83..2788ad8 100644
--- a/gopls/doc/settings.md
+++ b/gopls/doc/settings.md
@@ -70,7 +70,7 @@
 
 Include only project_a, but not node_modules inside it: `-`, `+project_a`, `-project_a/node_modules`
 
-Default: `[]`.
+Default: `["-node_modules"]`.
 
 #### **memoryMode** *enum*
 
diff --git a/internal/lsp/source/api_json.go b/internal/lsp/source/api_json.go
index c752220..a5dcb4d 100755
--- a/internal/lsp/source/api_json.go
+++ b/internal/lsp/source/api_json.go
@@ -40,7 +40,7 @@
 					Keys:      nil,
 				},
 				EnumValues: nil,
-				Default:    "[]",
+				Default:    "[\"-node_modules\"]",
 				Status:     "",
 				Hierarchy:  "build",
 			},
diff --git a/internal/lsp/source/options.go b/internal/lsp/source/options.go
index 5175507..6e75056 100644
--- a/internal/lsp/source/options.go
+++ b/internal/lsp/source/options.go
@@ -109,6 +109,7 @@
 					ExpandWorkspaceToModule:     true,
 					ExperimentalPackageCacheKey: true,
 					MemoryMode:                  ModeNormal,
+					DirectoryFilters:            []string{"-node_modules"},
 				},
 				UIOptions: UIOptions{
 					DiagnosticOptions: DiagnosticOptions{