public IList GetDiagnostics()

in src/PortingAssistantExtensionServer/Services/AnalysisService.cs [233:332]


        public IList<Diagnostic> GetDiagnostics(SourceFileAnalysisResult sourceFileAnalysisResult)
        {
            var diagnostics = new List<Diagnostic>();
            var fileUri = DocumentUri.FromFileSystemPath(sourceFileAnalysisResult.SourceFilePath);
            var codedescrption = new CodeDescription()
            {
                //TODO Move to a constants class
                Href = new Uri(Constants.PortingAssitantHelpUrl)
            };

            foreach (var api in sourceFileAnalysisResult.ApiAnalysisResults)
            {
                if (api.CompatibilityResults[_request.settings.TargetFramework].Compatibility == Compatibility.INCOMPATIBLE)
                {
                    try
                    {
                        var name = api.CodeEntityDetails.Signature;
                        var package = api.CodeEntityDetails.Package;
                        var rcommnadation = api.Recommendations.RecommendedActions
                            .Where(r => r.RecommendedActionType != RecommendedActionType.NoRecommendation)
                            .Select(r =>
                            {
                                switch (r.RecommendedActionType)
                                {
                                    case RecommendedActionType.UpgradePackage:
                                        return $"Upgrade Source Package { package.PackageId}-{package.Version} to version " + r.Description;
                                    case RecommendedActionType.ReplacePackage:
                                        return $"Replace Source Package { package.PackageId}-{package.Version} with " + r.Description;
                                    case RecommendedActionType.ReplaceApi:
                                        return r.Description;
                                    case RecommendedActionType.ReplaceNamespace:
                                        return r.Description;
                                    case RecommendedActionType.NoRecommendation:
                                        break;
                                    default:
                                        break;
                                }
                                return "";
                            });
                        var message = $"Porting Assistant: {name} is incompatible for target framework {_request.settings.TargetFramework} " + string.Join(", ", rcommnadation);
                        var range = GetRange(api.CodeEntityDetails.TextSpan);
                        var location = new Location()
                        {
                            Uri = fileUri,
                            Range = range
                        };
                        var diagnostic = new Diagnostic()
                        {
                            Severity = DiagnosticSeverity.Warning,
                            Code = new DiagnosticCode(Constants.DiagnosticCode),
                            Source = Constants.DiagnosticSource,
                            CodeDescription = codedescrption,
                            Range = range,
                            RelatedInformation = new Container<DiagnosticRelatedInformation>(new List<DiagnosticRelatedInformation>() { new DiagnosticRelatedInformation() {
                                Location = location
                            } }),
                            Message = message,
                        };
                        diagnostics.Add(diagnostic);
                    }
                    catch (Exception ex)
                    {
                        _logger.LogError(ex, "Add API diagnostic failed with error: ");
                    }
                }
            }

            foreach (var recommendedAction in sourceFileAnalysisResult.RecommendedActions)
            {
                var range = GetRange(recommendedAction.TextSpan);
                var location = new Location
                {
                    Uri = fileUri,
                    Range = range
                };
                try
                {
                    var diagnositc = new Diagnostic()
                    {
                        Severity = DiagnosticSeverity.Warning,
                        Code = new DiagnosticCode(Constants.DiagnosticWithActionCode),
                        Source = Constants.DiagnosticSource,
                        CodeDescription = codedescrption,
                        Range = range,
                        RelatedInformation = new Container<DiagnosticRelatedInformation>(new List<DiagnosticRelatedInformation>() {new DiagnosticRelatedInformation(){
                                Location = location
                            } }),
                        Message = recommendedAction.Description,
                    };
                    diagnostics.Add(diagnositc);
                    UpdateCodeAction(diagnositc.Message, diagnositc.Range, fileUri.Path, recommendedAction.TextChanges);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex, "Add porting action diagnostic failed with error: ");
                }
            }

            return diagnostics;
        }