Skip to content

Commit d88beec

Browse files
authored
Refactor apiviewgo type definition hoisting (#8668)
1 parent 457d9f5 commit d88beec

14 files changed

Lines changed: 492 additions & 262 deletions

File tree

src/go/cmd/api_view.go

Lines changed: 2 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"os"
99
"path/filepath"
1010
"slices"
11-
"sort"
1211
"strings"
1312
)
1413

@@ -28,77 +27,11 @@ func CreateAPIView(pkgDir, outputDir string) error {
2827
}
2928

3029
func createReview(pkgDir string) (PackageReview, error) {
31-
m, err := NewModule(pkgDir)
30+
r, err := NewReview(pkgDir)
3231
if err != nil {
3332
return PackageReview{}, err
3433
}
35-
tokenList := &[]Token{}
36-
nav := []Navigation{}
37-
diagnostics := []Diagnostic{}
38-
packageNames := []string{}
39-
for name, p := range m.packages {
40-
// we use a prefixed path separator so that we can handle the "internal" module.
41-
// internal/dig
42-
// internal/errorinfo
43-
// etc.
44-
// for other modules, we skip /internal subdirectories
45-
// azcore/internal/...
46-
if strings.Contains(p.relName, "/internal") || p.c.isEmpty() {
47-
continue
48-
}
49-
packageNames = append(packageNames, name)
50-
}
51-
sort.Strings(packageNames)
52-
for _, name := range packageNames {
53-
p := m.packages[name]
54-
n := p.relName
55-
makeToken(nil, nil, "package", TokenTypeMemberName, tokenList)
56-
makeToken(nil, nil, " ", TokenTypeWhitespace, tokenList)
57-
makeToken(&n, nil, n, TokenTypeTypeName, tokenList)
58-
makeToken(nil, nil, "", TokenTypeNewline, tokenList)
59-
makeToken(nil, nil, "", TokenTypeNewline, tokenList)
60-
// TODO: reordering these calls reorders APIView output and can omit content
61-
p.c.parseInterface(tokenList)
62-
p.c.parseStruct(tokenList)
63-
p.c.parseSimpleType(tokenList)
64-
p.c.parseVar(tokenList)
65-
p.c.parseConst(tokenList)
66-
p.c.parseFunc(tokenList)
67-
navItems := p.c.generateNavChildItems()
68-
nav = append(nav, Navigation{
69-
Text: n,
70-
NavigationId: n,
71-
ChildItems: navItems,
72-
Tags: &map[string]string{
73-
"TypeKind": "namespace",
74-
},
75-
})
76-
diagnostics = append(diagnostics, p.diagnostics...)
77-
}
78-
79-
slices.SortFunc(diagnostics, func(a Diagnostic, b Diagnostic) int {
80-
targetCmp := strings.Compare(a.TargetID, b.TargetID)
81-
if targetCmp != 0 {
82-
return targetCmp
83-
}
84-
// if the target IDs are the same then fall back to the text.
85-
// this accounts for cases where there are multiple diagnostics
86-
// for the same target ID.
87-
return strings.Compare(a.Text, b.Text)
88-
})
89-
90-
for _, n := range nav {
91-
recursiveSortNavigation(n)
92-
}
93-
94-
return PackageReview{
95-
Diagnostics: diagnostics,
96-
Language: "Go",
97-
Name: m.Name,
98-
Navigation: nav,
99-
Tokens: *tokenList,
100-
PackageName: m.PackageName,
101-
}, nil
34+
return r.Review()
10235
}
10336

10437
func recursiveSortNavigation(n Navigation) {

src/go/cmd/api_view_test.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -163,10 +163,6 @@ func TestDiagnostics(t *testing.T) {
163163
}
164164

165165
func TestAliasDefinitions(t *testing.T) {
166-
priorValue := sdkDirName
167-
sdkDirName = "testdata"
168-
defer func() { sdkDirName = priorValue }()
169-
170166
for _, test := range []struct {
171167
name, path, sourceName string
172168
diagLevel DiagnosticLevel
@@ -175,7 +171,7 @@ func TestAliasDefinitions(t *testing.T) {
175171
diagLevel: DiagnosticLevelWarning,
176172
name: "service_group",
177173
path: "testdata/test_service_group/group/test_alias_export",
178-
sourceName: "github.com/Azure/azure-sdk-for-go/sdk/test_service_group/group/internal.Foo",
174+
sourceName: "github.com/Azure/azure-sdk-tools/src/go/cmd/testdata/test_service_group/group/internal.Foo",
179175
},
180176
{
181177
diagLevel: DiagnosticLevelInfo,
@@ -187,11 +183,13 @@ func TestAliasDefinitions(t *testing.T) {
187183
diagLevel: DiagnosticLevelWarning,
188184
name: "external_package",
189185
path: "testdata/test_external_alias_exporter",
190-
sourceName: "github.com/Azure/azure-sdk-for-go/sdk/test_external_alias_source.Foo",
186+
sourceName: "github.com/Azure/azure-sdk-tools/src/go/cmd/testdata/test_external_alias_source.Foo",
191187
},
192188
} {
193189
t.Run(test.name, func(t *testing.T) {
194-
review, err := createReview(filepath.Clean(test.path))
190+
p, err := filepath.Abs(test.path)
191+
require.NoError(t, err)
192+
review, err := createReview(p)
195193
require.NoError(t, err)
196194
require.Equal(t, "Go", review.Language)
197195
require.Equal(t, 1, len(review.Diagnostics))
@@ -210,10 +208,6 @@ func TestAliasDefinitions(t *testing.T) {
210208
}
211209

212210
func TestRecursiveAliasDefinitions(t *testing.T) {
213-
priorValue := sdkDirName
214-
sdkDirName = "testdata"
215-
defer func() { sdkDirName = priorValue }()
216-
217211
for _, test := range []struct {
218212
name, path, sourceName string
219213
diagLevel DiagnosticLevel

0 commit comments

Comments
 (0)