Exemplo n.º 1
0
 public ListSymbolsCommand(
     ListSymbolsCommandLineOptions options,
     SymbolFilterOptions symbolFilterOptions,
     WrapListOptions wrapListOptions,
     SymbolDefinitionListLayout layout,
     SymbolDefinitionPartFilter ignoredParts,
     in ProjectFilter projectFilter) : base(projectFilter)
Exemplo n.º 2
0
        private static async Task <int> ListSymbolsAsync(ListSymbolsCommandLineOptions options)
        {
            if (!options.TryGetProjectFilter(out ProjectFilter projectFilter))
            {
                return(1);
            }

            if (!TryParseOptionValueAsEnum(options.Depth, ParameterNames.Depth, out DocumentationDepth depth, DocumentationDepth.Member))
            {
                return(1);
            }

            if (!TryParseOptionValueAsEnumFlags(options.WrapList, ParameterNames.WrapList, out WrapListOptions wrapListOptions))
            {
                return(1);
            }

            if (!TryParseMetadataNames(options.IgnoredAttributes, out ImmutableArray <MetadataName> ignoredAttributes))
            {
                return(1);
            }

            if (!TryParseMetadataNames(options.IgnoredSymbols, out ImmutableArray <MetadataName> ignoredSymbols))
            {
                return(1);
            }

            if (!TryParseOptionValueAsEnumFlags(options.IgnoredParts, ParameterNames.IgnoredParts, out SymbolDefinitionPartFilter ignoredParts))
            {
                return(1);
            }

            if (!TryParseOptionValueAsEnum(options.Layout, ParameterNames.Layout, out SymbolDefinitionListLayout layout, SymbolDefinitionListLayout.NamespaceList))
            {
                return(1);
            }

            if (!TryParseOptionValueAsEnumFlags(options.Visibility, ParameterNames.Visibility, out VisibilityFilter visibilityFilter, SymbolFilterOptions.Default.Visibility))
            {
                return(1);
            }

            ImmutableArray <SymbolFilterRule> rules = (ignoredSymbols.Any())
                ? ImmutableArray.Create <SymbolFilterRule>(new IgnoredNameSymbolFilterRule(ignoredSymbols))
                : ImmutableArray <SymbolFilterRule> .Empty;

            ImmutableArray <AttributeFilterRule> attributeRules = ImmutableArray.Create <AttributeFilterRule>(
                IgnoredAttributeNameFilterRule.Default,
                new IgnoredAttributeNameFilterRule(ignoredAttributes));

            var symbolFilterOptions = new SymbolFilterOptions(
                visibility: visibilityFilter,
                symbolGroups: GetSymbolGroupFilter(),
                rules: rules,
                attributeRules: attributeRules);

            var command = new ListSymbolsCommand(
                options: options,
                symbolFilterOptions: symbolFilterOptions,
                wrapListOptions: wrapListOptions,
                layout: layout,
                ignoredParts: ignoredParts,
                projectFilter: projectFilter);

            CommandResult result = await command.ExecuteAsync(options.Path, options.MSBuildPath, options.Properties);

            return((result.Kind == CommandResultKind.Success) ? 0 : 1);

            SymbolGroupFilter GetSymbolGroupFilter()
            {
                switch (depth)
                {
                case DocumentationDepth.Member:
                    return(SymbolGroupFilter.TypeOrMember);

                case DocumentationDepth.Type:
                    return(SymbolGroupFilter.Type);

                case DocumentationDepth.Namespace:
                    return(SymbolGroupFilter.None);

                default:
                    throw new InvalidOperationException();
                }
            }
        }