Example #1
0
        private static object[] BuildDefaultTestCase(FailureLevel level, ResultKind kind = ResultKind.Fail)
        {
            string lineLabel = level != FailureLevel.None
                ? level.ToString().ToLowerInvariant()
                : kind.ToString().ToLowerInvariant();

            if (kind == ResultKind.Informational)
            {
                // Console reporting historically abbreviates this term
                lineLabel = "info";
            }

            if (level == FailureLevel.None && kind == ResultKind.None)
            {
                // No good information? Mark it as informational.
                lineLabel = "info";
            }

            return(new object[]
            {
                level,
                kind,
                MultiLineTestRegion,
                $"{TestData.TestAnalysisTarget}(2,4,3,5): {lineLabel} {TestData.TestRuleId}: First: 42, Second: 54",
                TestData.TestAnalysisTarget
            });
        }
        private static string GetMessageText(
            string toolName,
            Uri uri,
            Region region,
            string ruleId,
            string message,
            ResultKind kind,
            FailureLevel level)
        {
            string path = ConstructPathFromUri(uri);

            string issueType = null;

            switch (level)
            {
            case FailureLevel.Note:
                issueType = "note";
                break;

            case FailureLevel.Error:
                issueType = "error";
                break;

            case FailureLevel.Warning:
                issueType = "warning";
                break;

            case FailureLevel.None:
                issueType = kind.ToString().ToLowerInvariant();
                // Shorten to 'info' for compatibility with previous behavior.
                if (issueType == "informational")
                {
                    issueType = "info";
                }
                break;

            default:
                throw new InvalidOperationException("Unknown message level:" + level.ToString());
            }

            string detailedDiagnosis = NormalizeMessage(message, enquote: false);

            string location = "";

            if (region != null)
            {
                // TODO: FormatForVisualStudio doesn't handle
                // binary and char offsets only.
                location = region.FormatForVisualStudio();
            }

            return((path != null ? (path + location) : toolName)
                   + $": {issueType} "
                   + (!string.IsNullOrEmpty(ruleId) ? (ruleId + ": ") : "")
                   + detailedDiagnosis);
        }
Example #3
0
        private static string GetMessageText(
            Uri uri,
            Region region,
            string ruleId,
            string message,
            ResultKind kind,
            FailureLevel level)
        {
            string path = null;

            ValidateKindAndLevel(kind, level);

            if (uri != null)
            {
                // If a path refers to a URI of form file://blah, we will convert to the local path
                if (uri.IsAbsoluteUri && uri.Scheme == Uri.UriSchemeFile)
                {
                    path = uri.LocalPath;
                }
                else
                {
                    path = uri.ToString();
                }
            }

            string issueType = null;

            switch (level)
            {
            case FailureLevel.Note:
                issueType = "info";
                break;

            case FailureLevel.Error:
                issueType = "error";
                break;

            case FailureLevel.Warning:
                issueType = "warning";
                break;

            case FailureLevel.None:
                issueType = kind.ToString().ToLowerInvariant();
                break;


            default:
                throw new InvalidOperationException("Unknown message kind:" + level.ToString());
            }

            string detailedDiagnosis = NormalizeMessage(message, enquote: false);

            string location = "";

            if (region != null)
            {
                // TODO
                if (region.CharOffset > 0 ||
                    region.ByteOffset > 0 ||
                    region.StartColumn == 0)
                {
                    return(string.Empty);
                }

                if (region.StartLine == 0)
                {
                    throw new InvalidOperationException();
                }

                location = region.FormatForVisualStudio();
            }

            string result = (path != null ? (path + location + ": ") : "") +
                            issueType + (!string.IsNullOrEmpty(ruleId) ? " " : "") +
                            (!string.IsNullOrEmpty(ruleId) ? (ruleId + ": ") : "") +
                            detailedDiagnosis;

            return(result);
        }
Example #4
0
        private static string GetMessageText(
            string toolName,
            Uri uri,
            Region region,
            string ruleId,
            string message,
            ResultKind kind,
            FailureLevel level)
        {
            string path = null;

            ValidateKindAndLevel(kind, level);

            path = ConstructPathFromUri(uri);

            string issueType = null;

            switch (level)
            {
            case FailureLevel.Note:
                issueType = "note";
                break;

            case FailureLevel.Error:
                issueType = "error";
                break;

            case FailureLevel.Warning:
                issueType = "warning";
                break;

            case FailureLevel.None:
                issueType = kind.ToString().ToLowerInvariant();
                // Shorten to 'info' for compat reasons with previous behaviors.
                if (issueType == "informational")
                {
                    issueType = "info";
                }
                ;
                break;


            default:
                throw new InvalidOperationException("Unknown message level:" + level.ToString());
            }

            string detailedDiagnosis = NormalizeMessage(message, enquote: false);

            string location = "";

            if (region != null)
            {
                // TODO
                if (region.CharOffset > 0 ||
                    region.ByteOffset > 0 ||
                    region.StartColumn == 0)
                {
                    return(string.Empty);
                }

                if (region.StartLine == 0)
                {
                    throw new InvalidOperationException();
                }

                location = region.FormatForVisualStudio();
            }

            string messageText =
                (path != null ? (path + location) : toolName) + ": " +
                issueType + (!string.IsNullOrEmpty(ruleId) ? " " : "") +
                (!string.IsNullOrEmpty(ruleId) ? (ruleId + ": ") : "") +
                detailedDiagnosis;

            return(messageText);
        }
Example #5
0
        public static string GetMessageText(
            Uri uri,
            Region region,
            string ruleId,
            string message,
            ResultKind messageKind)
        {
            string path = null;

            if (uri != null)
            {
                // If a path refers to a URI of form file://blah, we will convert to the local path
                if (uri.IsAbsoluteUri && uri.Scheme == Uri.UriSchemeFile)
                {
                    path = uri.LocalPath;
                }
                else
                {
                    path = uri.ToString();
                }
            }

            string issueType = null;

            switch (messageKind)
            {
            case ResultKind.ConfigurationError:
            case ResultKind.InternalError:
            case ResultKind.Error:
            {
                issueType = "error";
                break;
            }

            case ResultKind.Warning:
            {
                issueType = "warning";
                break;
            }

            case ResultKind.NotApplicable:
            case ResultKind.Note:
            case ResultKind.Pass:
            {
                issueType = "info";
                break;
            }

            default:
            {
                throw new InvalidOperationException("Unknown message kind:" + messageKind.ToString());
            }
            }

            string detailedDiagnosis = NormalizeMessage(message, enquote: false);

            string location = "";

            if (region != null)
            {
                // TODO
                if (region.Offset > 0 ||
                    region.StartColumn == 0)
                {
                    throw new NotImplementedException();
                }

                if (region.StartLine == 0)
                {
                    throw new InvalidOperationException();
                }

                location = region.FormatForVisualStudio();
            }

            string result = (path != null ? (path + location + ": ") : "") +
                            issueType + (!string.IsNullOrEmpty(ruleId) ? " " : "") +
                            (messageKind != ResultKind.Note ? ruleId : "") + ": " +
                            detailedDiagnosis;

            return(result);
        }
        public static string GetMessageText(
            Uri uri,
            Region region,
            string ruleId,
            string message,
            ResultKind messageKind)
        {
            string path = null;

            if (uri != null)
            {
                // If a path refers to a URI of form file://blah, we will convert to the local path
                if (uri.IsAbsoluteUri && uri.Scheme == Uri.UriSchemeFile)
                {
                    path = uri.LocalPath;
                }
                else
                {
                    path = uri.ToString();
                }
            }

            string issueType = null;

            switch (messageKind)
            {
            case ResultKind.ConfigurationError:
            case ResultKind.InternalError:
            case ResultKind.Error:
            {
                issueType = "error";
                break;
            }

            case ResultKind.Warning:
            {
                issueType = "warning";
                break;
            }

            case ResultKind.NotApplicable:
            case ResultKind.Note:
            {
                issueType = "note";
                break;
            }

            default:
            {
                throw new InvalidOperationException("Unknown message kind:" + messageKind.ToString());
            }
            }

            string detailedDiagnosis = NormalizeMessage(message, enquote: false);

            string location = "";

            if (region != null)
            {
                // TODO
                if (region.CharOffset > 0 ||
                    region.ByteOffset > 0 ||
                    region.StartColumn == 0)
                {
                    throw new NotImplementedException();
                }

                if (region.StartLine == 0)
                {
                    throw new InvalidOperationException();
                }

                // VS supports the following formatting options:
                //      (startLine)
                //      (startLine-endLine)
                //      (startLine,startColumn)
                //      (startLine,startColumn-endColumn)
                //      (startLine,startColumn,endLine,endColumn
                //
                //  For expedience, we'll convert everything to the most fully qualified format

                string start = region.StartLine.ToString() + "," +
                               (region.StartColumn > 0 ? region.StartColumn.ToString() : "1");

                string end = (region.EndLine > region.StartLine ? region.EndLine.ToString() : region.StartLine.ToString()) + "," +
                             (region.EndColumn > 0 ? region.EndColumn.ToString() : region.StartColumn.ToString());

                location =
                    "(" +
                    start + (end != start ? "," + end : "") +
                    ")";
            }

            return((path != null ? (path + location + ": ") : "") +
                   issueType + (!string.IsNullOrEmpty(ruleId) ? " " : "") +
                   (messageKind != ResultKind.Note ? ruleId : "") + ": " +
                   detailedDiagnosis);
        }
        public static string GetMessageText(
            IAnalysisContext context, 
            string message, 
            ResultKind messageKind,
            Region region = null)
        {
            string path = null;
            Uri uri = context.TargetUri;

            if (uri != null)
            {
                // If a path refers to a URI of form file://blah, we will convert to the local path           
                if (uri.IsAbsoluteUri && uri.Scheme == Uri.UriSchemeFile)
                {
                    path = uri.LocalPath;
                }
                else
                {
                    path = uri.ToString();
                }
            }

            string issueType = null;

            switch (messageKind)
            {
                case ResultKind.ConfigurationError:
                    {
                        issueType = "CONFIGURATION ERROR";
                        break;
                    }

                case ResultKind.InternalError:
                    {
                        issueType = "INTERNAL ERROR";
                        break;
                }

                case ResultKind.Error:
                {
                    issueType = "error";
                    break;
                }

                case ResultKind.Warning:
                {
                    issueType = "warning";
                    break;
                }

                case ResultKind.NotApplicable:
                case ResultKind.Note:
                    {
                        issueType = "note";
                        break;
                    }

                default:
                    {
                        throw new InvalidOperationException("Unknown message kind:" + messageKind.ToString());
                    }
            }

            string detailedDiagnosis = NormalizeMessage(message, enquote: false);

            string location = "";

            if (region != null)
            {
                // TODO 
                if (region.Offset > 0 || region.StartColumn == 0) { throw new NotImplementedException(); }

                if (region.StartLine == 0) { throw new InvalidOperationException(); }

                // VS supports the following formatting options:
                //      (startLine)
                //      (startLine-endLine)
                //      (startLine,startColumn)
                //      (startLine,startColumn-endColumn)
                //      (startLine,startColumn,endLine,endColumn
                //
                //  For expedience, we'll convert everything to the most fully qualified format

                string start = region.StartLine.ToString() + "," +
                              (region.StartColumn > 0 ? region.StartColumn.ToString() : "1");

                string end = (region.EndLine > region.StartLine ? region.EndLine.ToString() : region.StartLine.ToString()) + "," +
                             (region.EndColumn > 0 ? region.EndColumn.ToString() : region.StartColumn.ToString());

                location =
                    "(" +
                        start + (end != start ? "," + end : "") +
                    ")";
            }

            return (path != null ? (path + location + ": ") : "") +
                   issueType + " " +
                   context.Rule.Id + ": " +
                   detailedDiagnosis;
        }