Skip to content

Commit 89c79d7

Browse files
committed
clean up loops
1 parent a174d47 commit 89c79d7

File tree

2 files changed

+37
-47
lines changed

2 files changed

+37
-47
lines changed

lib/src/dartdoc_options.dart

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,26 +1094,23 @@ abstract class _DartdocFileOption<T> implements DartdocOption<T> {
10941094

10951095
/// Searches all dartdoc_options files through parent directories, starting at
10961096
/// [dir], for the option and returns one once found.
1097-
_OptionValueWithContext<Object> _valueAtFromFilesFirstFound(Folder dir) {
1097+
_OptionValueWithContext<Object> _valueAtFromFilesFirstFound(Folder folder) {
10981098
_OptionValueWithContext<Object> value;
1099-
while (true) {
1099+
for (var dir in folder.withAncestors) {
11001100
value = _valueAtFromFile(dir);
1101-
if (value != null || dir.isRoot) break;
1102-
dir = dir.parent2;
1101+
if (value != null) break;
11031102
}
11041103
return value;
11051104
}
11061105

11071106
/// Searches all dartdoc_options files for the option, and returns the value
11081107
/// in the top-most parent directory `dartdoc_options.yaml` file it is
11091108
/// mentioned in.
1110-
_OptionValueWithContext<Object> _valueAtFromFilesLastFound(Folder dir) {
1109+
_OptionValueWithContext<Object> _valueAtFromFilesLastFound(Folder folder) {
11111110
_OptionValueWithContext<Object> value;
1112-
while (true) {
1111+
for (var dir in folder.withAncestors) {
11131112
var tmpValue = _valueAtFromFile(dir);
11141113
if (tmpValue != null) value = tmpValue;
1115-
if (dir.isRoot) break;
1116-
dir = dir.parent2;
11171114
}
11181115
return value;
11191116
}
@@ -1179,35 +1176,32 @@ abstract class _DartdocFileOption<T> implements DartdocOption<T> {
11791176
definingFile: 'dartdoc_options.yaml');
11801177
}
11811178

1182-
_YamlFileData _yamlAtDirectory(Folder dir) {
1183-
var canonicalPaths = <String>[
1184-
resourceProvider.pathContext.canonicalize(dir.path)
1185-
];
1186-
if (!_yamlAtCanonicalPathCache.containsKey(canonicalPaths.first)) {
1187-
var yamlData = _YamlFileData({}, _directoryCurrentPath);
1179+
_YamlFileData _yamlAtDirectory(Folder folder) {
1180+
var canonicalPaths = <String>[];
1181+
var yamlData = _YamlFileData({}, _directoryCurrentPath);
1182+
1183+
for (var dir in folder.withAncestors) {
1184+
var canonicalPath =
1185+
resourceProvider.pathContext.canonicalize(folder.path);
1186+
if (_yamlAtCanonicalPathCache.containsKey(canonicalPath)) {
1187+
yamlData = _yamlAtCanonicalPathCache[canonicalPath];
1188+
break;
1189+
}
1190+
canonicalPaths.add(canonicalPath);
11881191
if (dir.exists) {
1189-
File dartdocOptionsFile;
1190-
1191-
while (true) {
1192-
dartdocOptionsFile = resourceProvider.getFile(resourceProvider
1193-
.pathContext
1194-
.join(dir.path, 'dartdoc_options.yaml'));
1195-
if (dartdocOptionsFile.exists || dir.isRoot) {
1196-
break;
1197-
}
1198-
dir = dir.parent2;
1199-
canonicalPaths
1200-
.add(resourceProvider.pathContext.canonicalize(dir.path));
1201-
}
1192+
var dartdocOptionsFile = resourceProvider.getFile(resourceProvider
1193+
.pathContext
1194+
.join(dir.path, 'dartdoc_options.yaml'));
12021195
if (dartdocOptionsFile.exists) {
12031196
yamlData = _YamlFileData(
12041197
loadYaml(dartdocOptionsFile.readAsStringSync()),
12051198
resourceProvider.pathContext.canonicalize(dir.path));
1199+
break;
12061200
}
12071201
}
1208-
canonicalPaths.forEach((p) => _yamlAtCanonicalPathCache[p] = yamlData);
12091202
}
1210-
return _yamlAtCanonicalPathCache[canonicalPaths.first];
1203+
canonicalPaths.forEach((p) => _yamlAtCanonicalPathCache[p] = yamlData);
1204+
return yamlData;
12111205
}
12121206
}
12131207

lib/src/package_meta.dart

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -177,23 +177,21 @@ abstract class PubPackageMeta extends PackageMeta {
177177

178178
static final _sdkDirParent = <String, Folder>{};
179179

180-
/// If [dir] is inside a Dart SDK, returns the directory of the SDK, and `null`
180+
/// If [folder] is inside a Dart SDK, returns the directory of the SDK, and `null`
181181
/// otherwise.
182-
static Folder sdkDirParent(Folder dir, ResourceProvider resourceProvider) {
182+
static Folder sdkDirParent(Folder folder, ResourceProvider resourceProvider) {
183183
var pathContext = resourceProvider.pathContext;
184-
var dirPathCanonical = pathContext.canonicalize(dir.path);
184+
var dirPathCanonical = pathContext.canonicalize(folder.path);
185185
if (!_sdkDirParent.containsKey(dirPathCanonical)) {
186186
_sdkDirParent[dirPathCanonical] = null;
187-
while (dir.exists) {
187+
for (var dir in folder.withAncestors) {
188188
if (_sdkDirFilePaths.every((List<String> l) {
189189
return l.any((f) =>
190190
resourceProvider.getFile(pathContext.join(dir.path, f)).exists);
191191
})) {
192192
_sdkDirParent[dirPathCanonical] = dir;
193193
break;
194194
}
195-
if (dir.isRoot) break;
196-
dir = dir.parent2;
197195
}
198196
}
199197
return _sdkDirParent[dirPathCanonical];
@@ -224,38 +222,36 @@ abstract class PubPackageMeta extends PackageMeta {
224222
/// [dir.absolute.path]. Multiple [dir.absolute.path]s will resolve to the
225223
/// same object if they are part of the same package. Returns null
226224
/// if the directory is not part of a known package.
227-
static PubPackageMeta fromDir(Folder dir, ResourceProvider resourceProvider) {
225+
static PubPackageMeta fromDir(
226+
Folder folder, ResourceProvider resourceProvider) {
228227
var pathContext = resourceProvider.pathContext;
229-
var original = resourceProvider.getFolder(pathContext.absolute(dir.path));
230-
dir = original;
228+
var original =
229+
resourceProvider.getFolder(pathContext.absolute(folder.path));
230+
folder = original;
231231
if (!original.exists) {
232232
throw PackageMetaFailure(
233233
'fatal error: unable to locate the input directory at ${original.path}.');
234234
}
235235

236-
if (!_packageMetaCache.containsKey(dir.path)) {
236+
if (!_packageMetaCache.containsKey(folder.path)) {
237237
PackageMeta packageMeta;
238238
// There are pubspec.yaml files inside the SDK. Ignore them.
239-
var parentSdkDir = sdkDirParent(dir, resourceProvider);
239+
var parentSdkDir = sdkDirParent(folder, resourceProvider);
240240
if (parentSdkDir != null) {
241241
packageMeta = _SdkMeta(parentSdkDir, resourceProvider);
242242
} else {
243-
while (dir.exists) {
243+
for (var dir in folder.withAncestors) {
244244
var pubspec = resourceProvider
245245
.getFile(pathContext.join(dir.path, 'pubspec.yaml'));
246246
if (pubspec.exists) {
247247
packageMeta = _FilePackageMeta(dir, resourceProvider);
248248
break;
249249
}
250-
// Allow a package to be at root (possible in a Windows setting with
251-
// drive letter mappings).
252-
if (dir.isRoot) break;
253-
dir = dir.parent2;
254250
}
255251
}
256-
_packageMetaCache[pathContext.absolute(dir.path)] = packageMeta;
252+
_packageMetaCache[pathContext.absolute(folder.path)] = packageMeta;
257253
}
258-
return _packageMetaCache[pathContext.absolute(dir.path)];
254+
return _packageMetaCache[pathContext.absolute(folder.path)];
259255
}
260256

261257
@override

0 commit comments

Comments
 (0)