示例#1
0
        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);
        }
示例#2
0
        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);
        }