modfile: rename directory directive to use

For golang/go#48257

Change-Id: I9cbb222c93a066717595bec14ff26f2902ef05d9
Reviewed-on: https://go-review.googlesource.com/c/mod/+/359412
Trust: Michael Matloob <matloob@golang.org>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
diff --git a/modfile/rule.go b/modfile/rule.go
index 98211a4..ed2f31a 100644
--- a/modfile/rule.go
+++ b/modfile/rule.go
@@ -609,7 +609,7 @@
 		f.Go = &Go{Syntax: line}
 		f.Go.Version = args[0]
 
-	case "directory":
+	case "use":
 		if len(args) != 1 {
 			errorf("usage: %s local/dir", verb)
 			return
@@ -619,7 +619,7 @@
 			errorf("invalid quoted string: %v", err)
 			return
 		}
-		f.Directory = append(f.Directory, &Directory{
+		f.Use = append(f.Use, &Use{
 			Path:   s,
 			Syntax: line,
 		})
diff --git a/modfile/testdata/work/comment.golden b/modfile/testdata/work/comment.golden
index 0a98a80..ac9bbbf 100644
--- a/modfile/testdata/work/comment.golden
+++ b/modfile/testdata/work/comment.golden
@@ -1,10 +1,10 @@
 // comment
-directory x // eol
+use x // eol
 
 // mid comment
 
 // comment 2
 // comment 2 line 2
-directory y // eoy
+use y // eoy
 
 // comment 3
diff --git a/modfile/testdata/work/comment.in b/modfile/testdata/work/comment.in
index 2a016da..df6d702 100644
--- a/modfile/testdata/work/comment.in
+++ b/modfile/testdata/work/comment.in
@@ -1,8 +1,8 @@
 // comment
-directory "x" // eol
+use "x" // eol
 // mid comment
 
 // comment 2
 // comment 2 line 2
-directory "y" // eoy
+use "y" // eoy
 // comment 3
diff --git a/modfile/testdata/work/directory.golden b/modfile/testdata/work/directory.golden
deleted file mode 100644
index 481b970..0000000
--- a/modfile/testdata/work/directory.golden
+++ /dev/null
@@ -1,7 +0,0 @@
-directory ../foo
-
-directory (
-	/bar
-
-	baz
-)
diff --git a/modfile/testdata/work/directory.in b/modfile/testdata/work/directory.in
deleted file mode 100644
index eacfcaa..0000000
--- a/modfile/testdata/work/directory.in
+++ /dev/null
@@ -1,7 +0,0 @@
-directory "../foo"
-
-directory (
-	"/bar"
-
-	"baz"
-)
diff --git a/modfile/testdata/work/replace.golden b/modfile/testdata/work/replace.golden
index b8e2bb5..534c1da 100644
--- a/modfile/testdata/work/replace.golden
+++ b/modfile/testdata/work/replace.golden
@@ -1,4 +1,4 @@
-directory abc
+use abc
 
 replace xyz v1.2.3 => /tmp/z
 
diff --git a/modfile/testdata/work/replace.in b/modfile/testdata/work/replace.in
index aafc854..dc434d7 100644
--- a/modfile/testdata/work/replace.in
+++ b/modfile/testdata/work/replace.in
@@ -1,4 +1,4 @@
-directory "abc"
+use "abc"
 
 replace "xyz" v1.2.3 => "/tmp/z"
 
diff --git a/modfile/testdata/work/replace2.golden b/modfile/testdata/work/replace2.golden
index 3d1546d..ca03dfd 100644
--- a/modfile/testdata/work/replace2.golden
+++ b/modfile/testdata/work/replace2.golden
@@ -1,4 +1,4 @@
-directory abc
+use abc
 
 replace (
 	xyz v1.2.3 => /tmp/z
diff --git a/modfile/testdata/work/replace2.in b/modfile/testdata/work/replace2.in
index 0d3a8b7..cf34eb4 100644
--- a/modfile/testdata/work/replace2.in
+++ b/modfile/testdata/work/replace2.in
@@ -1,4 +1,4 @@
-directory "abc"
+use "abc"
 
 replace (
 	"xyz" v1.2.3 => "/tmp/z"
diff --git a/modfile/testdata/work/use.golden b/modfile/testdata/work/use.golden
new file mode 100644
index 0000000..032bac1
--- /dev/null
+++ b/modfile/testdata/work/use.golden
@@ -0,0 +1,7 @@
+use ../foo
+
+use (
+	/bar
+
+	baz
+)
diff --git a/modfile/testdata/work/use.in b/modfile/testdata/work/use.in
new file mode 100644
index 0000000..cb790dd
--- /dev/null
+++ b/modfile/testdata/work/use.in
@@ -0,0 +1,7 @@
+use "../foo"
+
+use (
+	"/bar"
+
+	"baz"
+)
diff --git a/modfile/work.go b/modfile/work.go
index b1fabff..0c0e521 100644
--- a/modfile/work.go
+++ b/modfile/work.go
@@ -12,16 +12,16 @@
 
 // A WorkFile is the parsed, interpreted form of a go.work file.
 type WorkFile struct {
-	Go        *Go
-	Directory []*Directory
-	Replace   []*Replace
+	Go      *Go
+	Use     []*Use
+	Replace []*Replace
 
 	Syntax *FileSyntax
 }
 
-// A Directory is a single directory statement.
-type Directory struct {
-	Path       string // Directory path of module.
+// A Use is a single directory statement.
+type Use struct {
+	Path       string // Use path of module.
 	ModulePath string // Module path in the comment.
 	Syntax     *Line
 }
@@ -67,7 +67,7 @@
 					Err:      fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")),
 				})
 				continue
-			case "directory", "replace":
+			case "use", "replace":
 				for _, l := range x.Line {
 					f.add(&errs, l, x.Token[0], l.Token, fix)
 				}
@@ -87,13 +87,13 @@
 // Cleanup cleans out all the cleared entries.
 func (f *WorkFile) Cleanup() {
 	w := 0
-	for _, r := range f.Directory {
+	for _, r := range f.Use {
 		if r.Path != "" {
-			f.Directory[w] = r
+			f.Use[w] = r
 			w++
 		}
 	}
-	f.Directory = f.Directory[:w]
+	f.Use = f.Use[:w]
 
 	w = 0
 	for _, r := range f.Replace {
@@ -133,60 +133,60 @@
 	return nil
 }
 
-func (f *WorkFile) AddDirectory(diskPath, modulePath string) error {
+func (f *WorkFile) AddUse(diskPath, modulePath string) error {
 	need := true
-	for _, d := range f.Directory {
+	for _, d := range f.Use {
 		if d.Path == diskPath {
 			if need {
 				d.ModulePath = modulePath
-				f.Syntax.updateLine(d.Syntax, "directory", AutoQuote(diskPath))
+				f.Syntax.updateLine(d.Syntax, "use", AutoQuote(diskPath))
 				need = false
 			} else {
 				d.Syntax.markRemoved()
-				*d = Directory{}
+				*d = Use{}
 			}
 		}
 	}
 
 	if need {
-		f.AddNewDirectory(diskPath, modulePath)
+		f.AddNewUse(diskPath, modulePath)
 	}
 	return nil
 }
 
-func (f *WorkFile) AddNewDirectory(diskPath, modulePath string) {
-	line := f.Syntax.addLine(nil, "directory", AutoQuote(diskPath))
-	f.Directory = append(f.Directory, &Directory{Path: diskPath, ModulePath: modulePath, Syntax: line})
+func (f *WorkFile) AddNewUse(diskPath, modulePath string) {
+	line := f.Syntax.addLine(nil, "use", AutoQuote(diskPath))
+	f.Use = append(f.Use, &Use{Path: diskPath, ModulePath: modulePath, Syntax: line})
 }
 
-func (f *WorkFile) SetDirectory(dirs []*Directory) {
+func (f *WorkFile) SetUse(dirs []*Use) {
 	need := make(map[string]string)
 	for _, d := range dirs {
 		need[d.Path] = d.ModulePath
 	}
 
-	for _, d := range f.Directory {
+	for _, d := range f.Use {
 		if modulePath, ok := need[d.Path]; ok {
 			d.ModulePath = modulePath
 		} else {
 			d.Syntax.markRemoved()
-			*d = Directory{}
+			*d = Use{}
 		}
 	}
 
 	// TODO(#45713): Add module path to comment.
 
 	for diskPath, modulePath := range need {
-		f.AddNewDirectory(diskPath, modulePath)
+		f.AddNewUse(diskPath, modulePath)
 	}
 	f.SortBlocks()
 }
 
-func (f *WorkFile) DropDirectory(path string) error {
-	for _, d := range f.Directory {
+func (f *WorkFile) DropUse(path string) error {
+	for _, d := range f.Use {
 		if d.Path == path {
 			d.Syntax.markRemoved()
-			*d = Directory{}
+			*d = Use{}
 		}
 	}
 	return nil
diff --git a/modfile/work_test.go b/modfile/work_test.go
index 90f0f55..332df97 100644
--- a/modfile/work_test.go
+++ b/modfile/work_test.go
@@ -12,8 +12,8 @@
 	"testing"
 )
 
-// TODO(#45713): Update these tests once AddDirectory sets the module path.
-var workAddDirectoryTests = []struct {
+// TODO(#45713): Update these tests once AddUse sets the module path.
+var workAddUseTests = []struct {
 	desc       string
 	in         string
 	path       string
@@ -24,7 +24,7 @@
 		`empty`,
 		``,
 		`foo`, `bar`,
-		`directory foo`,
+		`use foo`,
 	},
 	{
 		`go_stmt_only`,
@@ -32,32 +32,32 @@
 		`,
 		`foo`, `bar`,
 		`go 1.17
-		directory foo
+		use foo
 		`,
 	},
 	{
-		`directory_line_present`,
+		`use_line_present`,
 		`go 1.17
-		directory baz`,
+		use baz`,
 		`foo`, `bar`,
 		`go 1.17
-		directory (
+		use (
 			baz
 		  foo
 		)
 		`,
 	},
 	{
-		`directory_block_present`,
+		`use_block_present`,
 		`go 1.17
-		directory (
+		use (
 			baz
 			quux
 		)
 		`,
 		`foo`, `bar`,
 		`go 1.17
-		directory (
+		use (
 			baz
 		  quux
 			foo
@@ -65,14 +65,14 @@
 		`,
 	},
 	{
-		`directory_and_replace_present`,
+		`use_and_replace_present`,
 		`go 1.17
-		directory baz
+		use baz
 		replace a => ./b
 		`,
 		`foo`, `bar`,
 		`go 1.17
-		directory (
+		use (
 			baz
 			foo
 		)
@@ -81,7 +81,7 @@
 	},
 }
 
-var workDropDirectoryTests = []struct {
+var workDropUseTests = []struct {
 	desc string
 	in   string
 	path string
@@ -102,46 +102,46 @@
 		`,
 	},
 	{
-		`singled_directory`,
+		`single_use`,
 		`go 1.17
-		directory foo`,
+		use foo`,
 		`foo`,
 		`go 1.17
 		`,
 	},
 	{
-		`directory_block`,
+		`use_block`,
 		`go 1.17
-		directory (
+		use (
 			foo
 			bar
 			baz
 		)`,
 		`bar`,
 		`go 1.17
-		directory (
+		use (
 			foo
 			baz
 		)`,
 	},
 	{
-		`directory_multi`,
+		`use_multi`,
 		`go 1.17
-		directory (
+		use (
 			foo
 			bar
 			baz
 		)
-		directory foo
-		directory quux
-		directory foo`,
+		use foo
+		use quux
+		use foo`,
 		`foo`,
 		`go 1.17
-		directory (
+		use (
 			bar
 			baz
 		)
-		directory quux`,
+		use quux`,
 	},
 }
 
@@ -167,38 +167,38 @@
 		go 1.17`,
 	},
 	{
-		`directory_after_replace`,
+		`use_after_replace`,
 		`
 		replace example.com/foo => ../bar
-		directory foo
+		use foo
 		`,
 		`1.17`,
 		`
 		go 1.17
 		replace example.com/foo => ../bar
-		directory foo
+		use foo
 		`,
 	},
 	{
-		`directory_before_replace`,
-		`directory foo
+		`use_before_replace`,
+		`use foo
 		replace example.com/foo => ../bar
 		`,
 		`1.17`,
 		`
 		go 1.17
-		directory foo
+		use foo
 		replace example.com/foo => ../bar
 		`,
 	},
 	{
-		`directory_only`,
-		`directory foo
+		`use_only`,
+		`use foo
 		`,
 		`1.17`,
 		`
 		go 1.17
-		directory foo
+		use foo
 		`,
 	},
 	{
@@ -216,24 +216,24 @@
 	desc, in, out string
 }{
 	{
-		`directory_duplicates_not_removed`,
+		`use_duplicates_not_removed`,
 		`go 1.17
-		directory foo
-		directory bar
-		directory (
+		use foo
+		use bar
+		use (
 			foo
 		)`,
 		`go 1.17
-		directory foo
-		directory bar
-		directory (
+		use foo
+		use bar
+		use (
 			foo
 		)`,
 	},
 	{
 		`replace_duplicates_removed`,
 		`go 1.17
-		directory foo
+		use foo
 		replace x.y/z v1.0.0 => ./a
 		replace x.y/z v1.1.0 => ./b
 		replace (
@@ -241,7 +241,7 @@
 		)
 		`,
 		`go 1.17
-		directory foo
+		use foo
 		replace x.y/z v1.1.0 => ./b
 		replace (
 			x.y/z v1.0.0 => ./c
@@ -250,21 +250,21 @@
 	},
 }
 
-func TestAddDirectory(t *testing.T) {
-	for _, tt := range workAddDirectoryTests {
+func TestAddUse(t *testing.T) {
+	for _, tt := range workAddUseTests {
 		t.Run(tt.desc, func(t *testing.T) {
 			testWorkEdit(t, tt.in, tt.out, func(f *WorkFile) error {
-				return f.AddDirectory(tt.path, tt.modulePath)
+				return f.AddUse(tt.path, tt.modulePath)
 			})
 		})
 	}
 }
 
-func TestDropDirectory(t *testing.T) {
-	for _, tt := range workDropDirectoryTests {
+func TestDropUse(t *testing.T) {
+	for _, tt := range workDropUseTests {
 		t.Run(tt.desc, func(t *testing.T) {
 			testWorkEdit(t, tt.in, tt.out, func(f *WorkFile) error {
-				if err := f.DropDirectory(tt.path); err != nil {
+				if err := f.DropUse(tt.path); err != nil {
 					return err
 				}
 				f.Cleanup()