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