/// <inheritdoc/>
        protected override Project ApplyCompilationOptions(Project project)
        {
            var resolver = new TestXmlReferenceResolver();

            string contentWithoutParamDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("MissingParamDocumentation.xml", contentWithoutParamDocumentation);

            string contentWithParamDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <param name=""foo"">Param 1</param>
        <param name=""bar"">Param 2</param>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("WithParamDocumentation.xml", contentWithParamDocumentation);

            string contentWithInvalidParamDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <param>Test</param>
        <param/>
        <param name="""">Test</param>
        <param name=""    "">Test</param>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("WithInvalidParamDocumentation.xml", contentWithInvalidParamDocumentation);

            string contentWithInheritedDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
 <ClassName>
    <Method>
        <inheritdoc />
        <param>Test</param>
        <param/>
        <param name="""">Test</param>
        <param name=""    "">Test</param>
    </Method>
 </ClassName>
 ";
            resolver.XmlReferences.Add("WithInheritedDocumentation.xml", contentWithInheritedDocumentation);

            project = base.ApplyCompilationOptions(project);
            project = project.WithCompilationOptions(project.CompilationOptions.WithXmlReferenceResolver(resolver));
            return project;
        }
Beispiel #2
0
        /// <summary>
        /// Returns a list of all analyzer diagnostics inside the specific project. This is an asynchronous operation.
        /// </summary>
        /// <param name="analyzers">The list of analyzers that should be used</param>
        /// <param name="project">The project that should be analyzed</param>
        /// <param name="force"><see langword="true"/> to force the analyzers to be enabled; otherwise,
        /// <see langword="false"/> to use the behavior configured for the specified <paramref name="project"/>.</param>
        /// <param name="cancellationToken">The cancellation token that the task will observe.</param>
        /// <returns>A list of diagnostics inside the project</returns>
        private static async Task<ImmutableArray<Diagnostic>> GetProjectAnalyzerDiagnosticsAsync(ImmutableArray<DiagnosticAnalyzer> analyzers, Project project, bool force, CancellationToken cancellationToken)
        {
            var supportedDiagnosticsSpecificOptions = new Dictionary<string, ReportDiagnostic>();
            if (force)
            {
                foreach (var analyzer in analyzers)
                {
                    foreach (var diagnostic in analyzer.SupportedDiagnostics)
                    {
                        // make sure the analyzers we are testing are enabled
                        supportedDiagnosticsSpecificOptions[diagnostic.Id] = ReportDiagnostic.Default;
                    }
                }
            }

            // Report exceptions during the analysis process as errors
            supportedDiagnosticsSpecificOptions.Add("AD0001", ReportDiagnostic.Error);

            // update the project compilation options
            var modifiedSpecificDiagnosticOptions = supportedDiagnosticsSpecificOptions.ToImmutableDictionary().SetItems(project.CompilationOptions.SpecificDiagnosticOptions);
            var modifiedCompilationOptions = project.CompilationOptions.WithSpecificDiagnosticOptions(modifiedSpecificDiagnosticOptions);
            var processedProject = project.WithCompilationOptions(modifiedCompilationOptions);

            Compilation compilation = await processedProject.GetCompilationAsync(cancellationToken).ConfigureAwait(false);
            CompilationWithAnalyzers compilationWithAnalyzers = compilation.WithAnalyzers(analyzers, cancellationToken: cancellationToken);

            var diagnostics = await FixAllContextHelper.GetAllDiagnosticsAsync(compilation, compilationWithAnalyzers, analyzers, project.Documents, true, cancellationToken).ConfigureAwait(false);
            return diagnostics;
        }
        /// <inheritdoc/>
        protected override Project ApplyCompilationOptions(Project project)
        {
            var resolver = new TestXmlReferenceResolver();

            string contentWithoutDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("NoDocumentation.xml", contentWithoutDocumentation);

            string contentWithoutParamDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("NoParamDocumentation.xml", contentWithoutParamDocumentation);

            string contentWithParamDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <param name=""foo"">Test</param>
        <param name=""bar"">Test</param>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("ParamDocumentation.xml", contentWithParamDocumentation);

            string contentWithEmptyParamDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <param name=""foo""></param>
        <param name=""bar"">   
            
        </param>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("EmptyParamDocumentation.xml", contentWithEmptyParamDocumentation);

            string contentWithEmptyParamDocumentation2 = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <param name=""foo""/>
        <param name=""bar"">
            <para>
                 
            </para>
        </param>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("EmptyParamDocumentation2.xml", contentWithEmptyParamDocumentation2);

            project = base.ApplyCompilationOptions(project);
            project = project.WithCompilationOptions(project.CompilationOptions.WithXmlReferenceResolver(resolver));
            return project;
        }
        /// <inheritdoc/>
        protected override Project ApplyCompilationOptions(Project project)
        {
            var resolver = new TestXmlReferenceResolver();
            string contentWithSummary = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Class1>
  <MethodName>
    <summary>
      Sample method.
    </summary>
    <returns>
      A <see cref=""Task""/> representing the asynchronous operation.
    </returns>
  </MethodName>
</Class1>
";
            resolver.XmlReferences.Add("ClassWithSummary.xml", contentWithSummary);

            string contentWithInheritedSummary = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Class1>
  <MethodName>
    <inheritdoc/>
  </MethodName>
</Class1>
";
            resolver.XmlReferences.Add("ClassWithInheritedSummary.xml", contentWithInheritedSummary);

            string contentWithEmptySummary = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Class1>
  <MethodName>
    <summary>
    </summary>
    <returns>
      A <see cref=""Task""/> representing the asynchronous operation.
    </returns>
  </MethodName>
</Class1>
";
            resolver.XmlReferences.Add("ClassWithEmptySummary.xml", contentWithEmptySummary);

            project = base.ApplyCompilationOptions(project);
            project = project.WithCompilationOptions(project.CompilationOptions.WithXmlReferenceResolver(resolver));
            return project;
        }
        /// <inheritdoc/>
        protected override Project ApplyCompilationOptions(Project project)
        {
            var resolver = new TestXmlReferenceResolver();

            string contentWithoutSummary = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
</ClassName>
";
            resolver.XmlReferences.Add("ClassWithoutSummary.xml", contentWithoutSummary);

            string contentWithSummary = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
  <summary>
    Foo
  </summary>
</ClassName>
";
            resolver.XmlReferences.Add("ClassWithSummary.xml", contentWithSummary);

            string contentWithDefaultSummary = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
  <summary>
    Summary description for the ClassName class.
  </summary>
</ClassName>
";
            resolver.XmlReferences.Add("ClassWithDefaultSummary.xml", contentWithDefaultSummary);

            project = base.ApplyCompilationOptions(project);
            project = project.WithCompilationOptions(project.CompilationOptions.WithXmlReferenceResolver(resolver));
            return project;
        }
Beispiel #6
0
        /// <summary>
        /// Compiles the given P# project.
        /// </summary>
        /// <param name="project">Project</param>
        private void CompileProject(Project project)
        {
            CompilationOptions options = null;
            if (this.CompilationContext.Configuration.OptimizationTarget == OptimizationTarget.Debug)
            {
                options = project.CompilationOptions.WithOptimizationLevel(OptimizationLevel.Debug);
            }
            else if (this.CompilationContext.Configuration.OptimizationTarget == OptimizationTarget.Release)
            {
                options = project.CompilationOptions.WithOptimizationLevel(OptimizationLevel.Release);
            }

            project = project.WithCompilationOptions(options);

            var compilation = project.GetCompilationAsync().Result;

            try
            {
                if (this.CompilationContext.Configuration.CompilationTarget == CompilationTarget.Library ||
                    this.CompilationContext.Configuration.CompilationTarget == CompilationTarget.Testing ||
                    this.CompilationContext.Configuration.CompilationTarget == CompilationTarget.Remote)
                {
                    this.ToFile(compilation, OutputKind.DynamicallyLinkedLibrary,
                        project.OutputFilePath, true, true);
                }
                else
                {
                    this.ToFile(compilation, project.CompilationOptions.OutputKind,
                        project.OutputFilePath, true, true);
                }
            }
            catch (ApplicationException ex)
            {
                IO.Error.ReportAndExit(ex.Message);
            }
        }
        /// <inheritdoc/>
        protected override Project ApplyCompilationOptions(Project project)
        {
            var resolver = new TestXmlReferenceResolver();

            string contentWithoutElementDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <TestMethod>
        <summary>
            Foo
        </summary>
    </TestMethod>
</TestClass>
";
            resolver.XmlReferences.Add("MissingElementDocumentation.xml", contentWithoutElementDocumentation);

            string contentWithElementDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <TestMethod>
        <summary>
            Foo
        </summary>
        <param name=""param1"">Param 1</param>
        <param name=""param2"">Param 2</param>
        <param name=""param3"">Param 3</param>
    </TestMethod>
</TestClass>
";
            resolver.XmlReferences.Add("WithElementDocumentation.xml", contentWithElementDocumentation);

            string contentWithInheritedDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
 <TestClass>
    <TestMethod>
        <inheritdoc />
    </TestMethod>
 </TestClass>
 ";
            resolver.XmlReferences.Add("InheritedDocumentation.xml", contentWithInheritedDocumentation);

            project = base.ApplyCompilationOptions(project);
            project = project.WithCompilationOptions(project.CompilationOptions.WithXmlReferenceResolver(resolver));
            return project;
        }
        /// <inheritdoc/>
        protected override Project ApplyCompilationOptions(Project project)
        {
            var resolver = new TestXmlReferenceResolver();

            string contentWithoutDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("NoDocumentation.xml", contentWithoutDocumentation);

            string contentWithoutReturns = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("WithoutReturns.xml", contentWithoutReturns);

            string contentWithReturns = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <returns>Test</returns>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("WithReturns.xml", contentWithReturns);

            string contentWithEmptyReturns = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <returns>
        
                              </returns>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("WithEmptyReturns.xml", contentWithEmptyReturns);

            string contentWithEmptyReturns2 = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <returns />
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("WithEmptyReturns2.xml", contentWithEmptyReturns2);

            string contentWithEmptyReturns3 = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<ClassName>
    <Method>
        <summary>
            Foo
        </summary>
        <returns></returns>
    </Method>
</ClassName>
";
            resolver.XmlReferences.Add("WithEmptyReturns3.xml", contentWithEmptyReturns3);

            project = base.ApplyCompilationOptions(project);
            project = project.WithCompilationOptions(project.CompilationOptions.WithXmlReferenceResolver(resolver));
            return project;
        }
        /// <inheritdoc/>
        protected override Project ApplyCompilationOptions(Project project)
        {
            var resolver = new TestXmlReferenceResolver();

            string correctDocumentation = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <summary>
            Some documentation.
        </summary>
        <remark>Some remark.</remark>
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("Correct.xml", correctDocumentation);

            string correctWithEmptyReferenceElements = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <summary>
            Some documentation <see cref=""TestClass""/>.
        </summary>
        <summary>
            Some documentation <see cref=""TestClass2""/>.
        </summary>
        <remark>Some remark.</remark>
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("CorrectWithEmptyElements.xml", correctWithEmptyReferenceElements);

            string correctWithEmptyElements = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <summary></summary>
        <remark></remark>
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("CorrectEmpty.xml", correctWithEmptyElements);

            string inherited = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <inheritdoc />
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("Inherited.xml", inherited);

            string badWithNormalization = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <summary>
            Some documentation <see cref=""TestClass""/>.
        </summary>
        <summary>
            Some documentation <see       cref  =   ""TestClass""     />.
        </summary>
        <remark>Some remark.</remark>
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("BadWithNormalization.xml", badWithNormalization);

            string badWithDuplicates = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <summary>Some documentation.</summary>
        <remark>Some documentation.</remark>
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("BadWithDuplicates.xml", badWithDuplicates);

            string badWithDuplicates2 = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <summary>
                                                     Some documentation.
        
        
        </summary>
        <remark>    Some documentation.      </remark>
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("BadWithDuplicates2.xml", badWithDuplicates2);

            string withIgnoredParameters = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<TestClass>
    <Test>
        <summary>The parameter is not used.</summary>
        <remark>The parameter is not used.</remark>
    </Test>
</TestClass>
";
            resolver.XmlReferences.Add("WithIgnoredParameters.xml", withIgnoredParameters);

            project = base.ApplyCompilationOptions(project);
            project = project.WithCompilationOptions(project.CompilationOptions.WithXmlReferenceResolver(resolver));
            return project;
        }