private static string CalculateNamespaceForProjectFromRootFolder( [CanBeNull] IProject project, IProjectFolder rootFolder, LanguageService languageService) { if (project == null || !rootFolder.IsLinked || rootFolder.Path == null) { return(null); } var calculatedNamespace = project.GetData(ourCalculatedDefaultNamespaceKey); if (calculatedNamespace != null) { return(calculatedNamespace); } var location = rootFolder.Path.ReferencedFolderPath; var packageJsonDirectory = FileSystemUtil.TryGetDirectoryNameOfFileAbove(location, "package.json"); if (packageJsonDirectory != null) { var path = location.MakeRelativeTo(packageJsonDirectory); // MAKE SURE TO KEEP UP TO DATE WITH THE RULES IN NamespaceProviderProjectSettingsProvider if (path.StartsWith("Runtime/Scripts")) { path = path.RemovePrefix("Runtime/Scripts"); } else if (path.StartsWith("Scripts/Runtime")) { path = path.RemovePrefix("Scripts/Runtime"); } else if (path.StartsWith("Runtime")) { path = path.RemovePrefix("Runtime"); } else if (path.StartsWith("Scripts")) { path = path.RemovePrefix("Scripts"); } foreach (var pathComponent in path.Components) { var name = NamespaceFolderUtil.MakeValidQualifiedName(pathComponent.ToString(), languageService); calculatedNamespace = calculatedNamespace.IsNullOrEmpty() ? name : $"{calculatedNamespace}.{name}"; } } project.PutData(ourCalculatedDefaultNamespaceKey, calculatedNamespace); return(calculatedNamespace); }
private static string CalculateNamespace([NotNull] IProjectItem item, LanguageService languageService, NamespaceFolderProperty namespaceFolderProperty) { if (item.ParentFolder is IProject && item is IProjectFolder rootFolder) { return(CalculateNamespaceForProjectFromRootFolder(item.GetProject(), rootFolder, languageService)); } var parentFolder = item.ParentFolder; if (parentFolder == null) { return(null); } var parentNamespace = CalculateNamespace(parentFolder, languageService, namespaceFolderProperty); if (parentNamespace == null) { return(null); } if (item is IProjectFolder folder) { var isNamespaceProvider = namespaceFolderProperty.GetNamespaceFolderProperty(folder); if (!isNamespaceProvider) { return(parentNamespace); } } if (item is IProjectFile) { return(parentNamespace); } var suffix = NamespaceFolderUtil.MakeValidQualifiedName(item.Name, languageService); if (parentNamespace.Length > 0) { if (string.IsNullOrEmpty(suffix)) { return(parentNamespace); } return($"{parentNamespace}.{suffix}"); } return(suffix); }