| // Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:io'; |
| |
| import 'package:path/path.dart'; |
| |
| /// Returns the absolute path to the analysis_server directory. |
| String get serverPath { |
| var scriptPath = Platform.script.toFilePath(); |
| var serverPath = scriptPath; |
| while (!serverPath.endsWith('/analysis_server')) { |
| serverPath = context.dirname(serverPath); |
| } |
| return serverPath; |
| } |
| |
| /// Returns a sorted list of the names of the files in the given [directoryPath] |
| /// that have a `.dart` extension and are not in the list of [excludedNames]. |
| List<String> filesInDirectory( |
| String directoryPath, |
| List<String> excludedNames, |
| ) { |
| var fileNames = <String>[]; |
| _addFilesInDirectory( |
| directory: Directory(directoryPath), |
| excludedNames: excludedNames, |
| fileNames: fileNames, |
| ); |
| return fileNames..sort(); |
| } |
| |
| /// Adds the names of the files in the given [directoryPath] that have a `.dart` |
| /// extension and are not in the list of [excludedNames] to the list of |
| /// [fileNames]. |
| /// |
| /// Files in subdirectories |
| void _addFilesInDirectory({ |
| required Directory directory, |
| required List<String> excludedNames, |
| required List<String> fileNames, |
| String suffix = '', |
| }) { |
| for (var entity in directory.listSync()) { |
| if (entity is File) { |
| var fileName = context.basename(entity.path); |
| if (fileName.endsWith('.dart') && !excludedNames.contains(fileName)) { |
| if (suffix.isNotEmpty) { |
| fileNames.add('$fileName ($suffix)'); |
| } else { |
| fileNames.add(fileName); |
| } |
| } |
| } else if (entity is Directory) { |
| var dirName = context.basename(entity.path); |
| _addFilesInDirectory( |
| directory: entity, |
| excludedNames: excludedNames, |
| fileNames: fileNames, |
| suffix: suffix.isEmpty ? dirName : '$suffix/$dirName', |
| ); |
| } |
| } |
| } |