Skip to content

Commit 2c50401

Browse files
authored
refactor: Refactor locate modules logic. (serverpod#3380)
1 parent d4fc895 commit 2c50401

File tree

3 files changed

+58
-84
lines changed

3 files changed

+58
-84
lines changed

tools/serverpod_cli/lib/src/config/config.dart

+3-9
Original file line numberDiff line numberDiff line change
@@ -335,17 +335,11 @@ class GeneratorConfig implements ModelLoadConfig {
335335
}
336336
}
337337

338-
var modules = await locateModules(
339-
directory: Directory(serverRootDir),
340-
manualModules: manualModules,
338+
var modules = loadModuleConfigs(
339+
packageConfig: packageConfig,
340+
nickNameOverrides: manualModules,
341341
);
342342

343-
if (modules == null) {
344-
throw const ServerpodModulesNotFoundException(
345-
'Failed to locate modules',
346-
);
347-
}
348-
349343
// Load extraClasses
350344
var extraClasses = <TypeDefinition>[];
351345
var configExtraClasses = generatorConfig['extraClasses'];

tools/serverpod_cli/lib/src/language_server/language_server.dart

+1-4
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,8 @@ Future<void> runLanguageServer() async {
4848
});
4949

5050
connection.onInitialized((_) async {
51-
if (serverProject == null &&
52-
exception is ServerpodModulesNotFoundException) {
51+
if (exception is ServerpodModulesNotFoundException) {
5352
_sendModulesNotFoundNotification(connection);
54-
} else if (serverProject == null) {
55-
return;
5653
}
5754

5855
serverProject?.analyzer.validateAll();

tools/serverpod_cli/lib/src/util/locate_modules.dart

+54-71
Original file line numberDiff line numberDiff line change
@@ -3,87 +3,71 @@ import 'dart:io';
33
import 'package:package_config/package_config.dart';
44
import 'package:path/path.dart' as path;
55
import 'package:serverpod_cli/src/config/config.dart';
6-
import 'package:serverpod_cli/src/util/serverpod_cli_logger.dart';
76
import 'package:serverpod_shared/serverpod_shared.dart';
87
import 'package:yaml/yaml.dart';
98

109
const _serverSuffix = '_server';
1110

12-
Future<List<ModuleConfig>?> locateModules({
13-
required Directory directory,
14-
List<String> excludePackages = const [],
15-
Map<String, String?> manualModules = const {},
16-
}) async {
11+
List<ModuleConfig> loadModuleConfigs({
12+
required PackageConfig packageConfig,
13+
Map<String, String?> nickNameOverrides = const {},
14+
}) {
1715
var modules = <ModuleConfig>[];
1816

19-
var packageConfig = await findPackageConfig(directory);
20-
if (packageConfig != null) {
21-
for (var packageInfo in packageConfig.packages) {
22-
try {
23-
var packageName = packageInfo.name;
24-
if (excludePackages.contains(packageName)) {
25-
continue;
26-
}
27-
28-
if (!packageName.endsWith(_serverSuffix) &&
29-
packageName != 'serverpod') {
30-
continue;
31-
}
32-
var moduleName = moduleNameFromServerPackageName(packageName);
33-
34-
var packageSrcRoot = packageInfo.packageUriRoot;
35-
var moduleProjectRoot = List<String>.from(packageSrcRoot.pathSegments)
36-
..removeLast()
37-
..removeLast();
38-
var generatorConfigSegments = path
39-
.joinAll([...moduleProjectRoot, 'config', 'generator.yaml']).split(
40-
path.separator);
41-
42-
var generatorConfigUri = packageSrcRoot.replace(
43-
pathSegments: generatorConfigSegments,
44-
);
45-
46-
var generatorConfigFile = File.fromUri(generatorConfigUri);
47-
if (!await generatorConfigFile.exists()) {
48-
continue;
49-
}
50-
51-
var moduleProjectUri = packageSrcRoot.replace(
52-
pathSegments: moduleProjectRoot,
53-
);
54-
55-
var migrationVersions = findAllMigrationVersionsSync(
56-
directory: Directory.fromUri(moduleProjectUri),
57-
moduleName: moduleName,
58-
);
59-
60-
var moduleInfo = loadConfigFile(generatorConfigFile);
61-
62-
var manualNickname = manualModules[moduleName];
63-
var nickname = manualNickname ?? moduleInfo['nickname'] ?? moduleName;
64-
65-
modules.add(
66-
ModuleConfig(
67-
type: GeneratorConfig.getPackageType(moduleInfo),
68-
name: moduleName,
69-
nickname: nickname,
70-
migrationVersions: migrationVersions,
71-
serverPackageDirectoryPathParts: moduleProjectRoot,
72-
),
73-
);
74-
} catch (e) {
17+
for (var packageInfo in packageConfig.packages) {
18+
try {
19+
var packageName = packageInfo.name;
20+
21+
if (!packageName.endsWith(_serverSuffix) && packageName != 'serverpod') {
7522
continue;
7623
}
77-
}
7824

79-
return modules;
80-
} else {
81-
log.error(
82-
'Failed to read your server\'s package configuration. Have you run '
83-
'`dart pub get` in your server directory?',
84-
);
85-
return null;
25+
var packageSrcRoot = packageInfo.packageUriRoot;
26+
var moduleProjectRoot = List<String>.from(packageSrcRoot.pathSegments)
27+
..removeLast()
28+
..removeLast();
29+
var generatorConfigSegments = path
30+
.joinAll([...moduleProjectRoot, 'config', 'generator.yaml']).split(
31+
path.separator);
32+
33+
var generatorConfigUri = packageSrcRoot.replace(
34+
pathSegments: generatorConfigSegments,
35+
);
36+
37+
var generatorConfigFile = File.fromUri(generatorConfigUri);
38+
if (!generatorConfigFile.existsSync()) {
39+
continue;
40+
}
41+
42+
var moduleProjectUri = packageSrcRoot.replace(
43+
pathSegments: moduleProjectRoot,
44+
);
45+
46+
var migrationVersions = findAllMigrationVersionsSync(
47+
directory: Directory.fromUri(moduleProjectUri),
48+
);
49+
50+
var moduleInfo = loadConfigFile(generatorConfigFile);
51+
52+
var moduleName = moduleNameFromServerPackageName(packageName);
53+
var manualNickname = nickNameOverrides[moduleName];
54+
var nickname = manualNickname ?? moduleInfo['nickname'] ?? moduleName;
55+
56+
modules.add(
57+
ModuleConfig(
58+
type: GeneratorConfig.getPackageType(moduleInfo),
59+
name: moduleName,
60+
nickname: nickname,
61+
migrationVersions: migrationVersions,
62+
serverPackageDirectoryPathParts: moduleProjectRoot,
63+
),
64+
);
65+
} catch (e) {
66+
continue;
67+
}
8668
}
69+
70+
return modules;
8771
}
8872

8973
Map<dynamic, dynamic> loadConfigFile(File file) {
@@ -93,7 +77,6 @@ Map<dynamic, dynamic> loadConfigFile(File file) {
9377

9478
List<String> findAllMigrationVersionsSync({
9579
required Directory directory,
96-
required String moduleName,
9780
}) {
9881
try {
9982
var migrationRoot = MigrationConstants.migrationsBaseDirectory(directory);

0 commit comments

Comments
 (0)