本文整理汇总了C#中ReportDiagnostic类的典型用法代码示例。如果您正苦于以下问题:C# ReportDiagnostic类的具体用法?C# ReportDiagnostic怎么用?C# ReportDiagnostic使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ReportDiagnostic类属于命名空间,在下文中一共展示了ReportDiagnostic类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: WithEffectiveAction
/// <summary>
/// Create a RuleSet with a global effective action applied on it.
/// </summary>
public RuleSet WithEffectiveAction(ReportDiagnostic action)
{
if (!_includes.IsEmpty)
{
throw new ArgumentException("Effective action cannot be applied to rulesets with Includes");
}
switch (action)
{
case ReportDiagnostic.Default:
return this;
case ReportDiagnostic.Suppress:
return null;
case ReportDiagnostic.Error:
case ReportDiagnostic.Warn:
case ReportDiagnostic.Info:
case ReportDiagnostic.Hidden:
var generalOption = _generalDiagnosticOption == ReportDiagnostic.Default ? ReportDiagnostic.Default : action;
var specificOptions = _specificDiagnosticOptions.ToBuilder();
foreach (var item in _specificDiagnosticOptions)
{
if (item.Value != ReportDiagnostic.Suppress && item.Value != ReportDiagnostic.Default)
{
specificOptions[item.Key] = action;
}
}
return new RuleSet(FilePath, generalOption, specificOptions.ToImmutable(), _includes);
default:
return null;
}
}
示例2: DiagnosticItem
public DiagnosticItem(AnalyzerItem analyzerItem, DiagnosticDescriptor descriptor, ReportDiagnostic effectiveSeverity)
: base(string.Format("{0}: {1}", descriptor.Id, descriptor.Title))
{
_analyzerItem = analyzerItem;
_descriptor = descriptor;
_effectiveSeverity = effectiveSeverity;
}
示例3: RuleSet
/// <summary>
/// Create a RuleSet.
/// </summary>
public RuleSet(string filePath, ReportDiagnostic generalOption, ImmutableDictionary<string, ReportDiagnostic> specificOptions, ImmutableArray<RuleSetInclude> includes)
{
_filePath = filePath;
_generalDiagnosticOption = generalOption;
_specificDiagnosticOptions = specificOptions == null ? ImmutableDictionary<string, ReportDiagnostic>.Empty : specificOptions;
_includes = includes.IsDefault ? ImmutableArray<RuleSetInclude>.Empty : includes;
}
示例4: RuleSet
/// <summary>
/// Create a RuleSet.
/// </summary>
public RuleSet(string filePath, ReportDiagnostic generalOption, IDictionary<string, ReportDiagnostic> specificOptions, IEnumerable<RuleSetInclude> includes)
{
this.filePath = filePath;
this.generalDiagnosticOption = generalOption;
this.specificDiagnosticOptions = specificOptions == null ? ImmutableDictionary<string, ReportDiagnostic>.Empty : specificOptions.ToImmutableDictionary();
this.includes = includes == null ? ImmutableArray<RuleSetInclude>.Empty : includes.ToImmutableArray();
}
示例5: GetDiagnosticReport
// Take a warning and return the final deposition of the given warning,
// based on both command line options and pragmas.
// If you update this method, also update DiagnosticItemSource.GetEffectiveSeverity.
internal static ReportDiagnostic GetDiagnosticReport(DiagnosticSeverity severity, bool isEnabledByDefault, string id, int diagnosticWarningLevel, Location location, string category, int warningLevelOption, ReportDiagnostic generalDiagnosticOption, IDictionary<string, ReportDiagnostic> specificDiagnosticOptions)
{
// Read options (e.g., /nowarn or /warnaserror)
ReportDiagnostic report = ReportDiagnostic.Default;
var isSpecified = specificDiagnosticOptions.TryGetValue(id, out report);
if (!isSpecified)
{
report = isEnabledByDefault ? ReportDiagnostic.Default : ReportDiagnostic.Suppress;
}
// Compute if the reporting should be suppressed.
if (diagnosticWarningLevel > warningLevelOption // honor the warning level
|| report == ReportDiagnostic.Suppress) // check options (/nowarn)
{
return ReportDiagnostic.Suppress;
}
// If location is available, check out pragmas
if (location != null &&
location.SourceTree != null &&
((SyntaxTree)location.SourceTree).GetPragmaDirectiveWarningState(id, location.SourceSpan.Start) == ReportDiagnostic.Suppress)
{
return ReportDiagnostic.Suppress;
}
// Unless specific warning options are defined (/warnaserror[+|-]:<n> or /nowarn:<n>,
// follow the global option (/warnaserror[+|-] or /nowarn).
if (report == ReportDiagnostic.Default)
{
switch (generalDiagnosticOption)
{
case ReportDiagnostic.Error:
// If we've been asked to do warn-as-error then don't raise severity for anything below warning (info or hidden).
if (severity == DiagnosticSeverity.Warning)
{
// In the case where /warnaserror+ is followed by /warnaserror-:<n> on the command line,
// do not promote the warning specified in <n> to an error.
if (!isSpecified && (report == ReportDiagnostic.Default))
{
return ReportDiagnostic.Error;
}
}
break;
case ReportDiagnostic.Suppress:
// When doing suppress-all-warnings, don't lower severity for anything other than warning and info.
// We shouldn't suppress hidden diagnostics here because then features that use hidden diagnostics to
// display a lightbulb would stop working if someone has suppress-all-warnings (/nowarn) specified in their project.
if (severity == DiagnosticSeverity.Warning || severity == DiagnosticSeverity.Info)
{
return ReportDiagnostic.Suppress;
}
break;
default:
break;
}
}
return report;
}
示例6: DiagnosticItem
public DiagnosticItem(AnalyzerItem analyzerItem, DiagnosticDescriptor descriptor, ReportDiagnostic effectiveSeverity, IContextMenuController contextMenuController)
: base(string.Format("{0}: {1}", descriptor.Id, descriptor.Title))
{
_analyzerItem = analyzerItem;
_descriptor = descriptor;
_effectiveSeverity = effectiveSeverity;
_contextMenuController = contextMenuController;
}
示例7: UpdateEffectiveSeverity
internal void UpdateEffectiveSeverity(ReportDiagnostic newEffectiveSeverity)
{
if (_effectiveSeverity != newEffectiveSeverity)
{
_effectiveSeverity = newEffectiveSeverity;
NotifyPropertyChanged(nameof(EffectiveSeverity));
NotifyPropertyChanged(nameof(IconMoniker));
}
}
示例8: Filter
/// <summary>
/// Modifies an input <see cref="Diagnostic"/> per the given options. For example, the
/// severity may be escalated, or the <see cref="Diagnostic"/> may be filtered out entirely
/// (by returning null).
/// </summary>
/// <param name="d">The input diagnostic</param>
/// <param name="warningLevelOption">The maximum warning level to allow. Diagnostics with a higher warning level will be filtered out.</param>
/// <param name="generalDiagnosticOption">How warning diagnostics should be reported</param>
/// <param name="specificDiagnosticOptions">How specific diagnostics should be reported</param>
/// <returns>A diagnostic updated to reflect the options, or null if it has been filtered out</returns>
public static Diagnostic Filter(Diagnostic d, int warningLevelOption, ReportDiagnostic generalDiagnosticOption, IDictionary<string, ReportDiagnostic> specificDiagnosticOptions)
{
if (d == null)
{
return d;
}
else if (d.IsNotConfigurable())
{
if (d.IsEnabledByDefault)
{
// Enabled NotConfigurable should always be reported as it is.
return d;
}
else
{
// Disabled NotConfigurable should never be reported.
return null;
}
}
else if (d.Severity == InternalDiagnosticSeverity.Void)
{
return null;
}
//In the native compiler, all warnings originating from alink.dll were issued
//under the id WRN_ALinkWarn - 1607. If a customer used nowarn:1607 they would get
//none of those warnings. In Roslyn, we've given each of these warnings their
//own number, so that they may be configured independently. To preserve compatibility
//if a user has specifically configured 1607 and we are reporting one of the alink warnings, use
//the configuration specified for 1607. As implemented, this could result in customers
//specifying warnaserror:1607 and getting a message saying "warning as error CS8012..."
//We don't permit configuring 1607 and independently configuring the new warnings.
ReportDiagnostic reportAction;
if (s_alinkWarnings.Contains((ErrorCode)d.Code) &&
specificDiagnosticOptions.Keys.Contains(CSharp.MessageProvider.Instance.GetIdForErrorCode((int)ErrorCode.WRN_ALinkWarn)))
{
reportAction = GetDiagnosticReport(ErrorFacts.GetSeverity(ErrorCode.WRN_ALinkWarn),
d.IsEnabledByDefault,
CSharp.MessageProvider.Instance.GetIdForErrorCode((int)ErrorCode.WRN_ALinkWarn),
ErrorFacts.GetWarningLevel(ErrorCode.WRN_ALinkWarn),
d.Location as Location,
d.Category,
warningLevelOption,
generalDiagnosticOption,
specificDiagnosticOptions);
}
else
{
reportAction = GetDiagnosticReport(d.Severity, d.IsEnabledByDefault, d.Id, d.WarningLevel, d.Location as Location, d.Category, warningLevelOption, generalDiagnosticOption, specificDiagnosticOptions);
}
return d.WithReportDiagnostic(reportAction);
}
示例9: Filter
/// <summary>
/// Modifies an input <see cref="Diagnostic"/> per the given options. For example, the
/// severity may be escalated, or the <see cref="Diagnostic"/> may be filtered out entirely
/// (by returning null).
/// </summary>
/// <param name="d">The input diagnostic</param>
/// <param name="warningLevelOption">The maximum warning level to allow. Diagnostics with a higher warning level will be filtered out.</param>
/// <param name="generalDiagnosticOption">How warning diagnostics should be reported</param>
/// <param name="specificDiagnosticOptions">How specific diagnostics should be reported</param>
/// <returns>A diagnostic updated to reflect the options, or null if it has been filtered out</returns>
public static Diagnostic Filter(Diagnostic d, int warningLevelOption, ReportDiagnostic generalDiagnosticOption, IDictionary<string, ReportDiagnostic> specificDiagnosticOptions)
{
if (d == null) return d;
switch (d.Severity)
{
case DiagnosticSeverity.Error:
// If it is a compiler error, keep it as it is.
// TODO: We currently use .Category to detect whether the diagnostic is a compiler diagnostic.
// Perhaps there should be a stronger way of checking this that avoids the possibility of an
// inadvertent clash for some custom diagnostic that happens to use the same category string.
if (d.Category == Diagnostic.CompilerDiagnosticCategory)
{
return d;
}
break;
case InternalDiagnosticSeverity.Void:
return null;
default:
break;
}
//In the native compiler, all warnings originating from alink.dll were issued
//under the id WRN_ALinkWarn - 1607. If a customer used nowarn:1607 they would get
//none of those warnings. In Roslyn, we've given each of these warnings their
//own number, so that they may be configured independently. To preserve compatibility
//if a user has specifically configured 1607 and we are reporting one of the alink warnings, use
//the configuration specified for 1607. As implemented, this could result in customers
//specifying warnaserror:1607 and getting a message saying "warning as error CS8012..."
//We don't permit configuring 1607 and independently configuring the new warnings.
ReportDiagnostic reportAction;
if (AlinkWarnings.Contains((ErrorCode)d.Code) &&
specificDiagnosticOptions.Keys.Contains(CSharp.MessageProvider.Instance.GetIdForErrorCode((int)ErrorCode.WRN_ALinkWarn)))
{
reportAction = GetDiagnosticReport(ErrorFacts.GetSeverity(ErrorCode.WRN_ALinkWarn),
d.IsEnabledByDefault,
CSharp.MessageProvider.Instance.GetIdForErrorCode((int)ErrorCode.WRN_ALinkWarn),
ErrorFacts.GetWarningLevel(ErrorCode.WRN_ALinkWarn),
d.Location as Location,
d.Category,
warningLevelOption,
generalDiagnosticOption,
specificDiagnosticOptions);
}
else
{
reportAction = GetDiagnosticReport(d.Severity, d.IsEnabledByDefault, d.Id, d.WarningLevel, d.Location as Location, d.Category, warningLevelOption, generalDiagnosticOption, specificDiagnosticOptions);
}
return d.WithReportDiagnostic(reportAction);
}
示例10: ConvertReportDiagnosticToAction
private static string ConvertReportDiagnosticToAction(ReportDiagnostic value)
{
switch (value)
{
case ReportDiagnostic.Default:
return "Default";
case ReportDiagnostic.Error:
return "Error";
case ReportDiagnostic.Warn:
return "Warning";
case ReportDiagnostic.Info:
return "Info";
case ReportDiagnostic.Hidden:
return "Hidden";
case ReportDiagnostic.Suppress:
return "None";
default:
throw ExceptionUtilities.Unreachable;
}
}
示例11: SetSeverity
internal static void SetSeverity(this XDocument ruleSet, string analyzerId, string ruleId, ReportDiagnostic value)
{
var newAction = ConvertReportDiagnosticToAction(value);
var rules = FindOrCreateRulesElement(ruleSet, analyzerId);
var rule = FindOrCreateRuleElement(rules, ruleId);
if (value == ReportDiagnostic.Default)
{
// If the new severity is 'Default' we just delete the entry for the rule from the ruleset file.
// In the absence of an explicit entry in the ruleset file, the rule reverts back to its 'Default'
// severity (so far as the 'current' ruleset file is concerned - the rule's effective severity
// could still be decided by other factors such as project settings or a base ruleset file).
rule.Remove();
}
else
{
rule.Attribute("Action").Value = newAction;
}
var allMatchingRules = ruleSet.Root
.Descendants("Rule")
.Where(r => r.Attribute("Id").Value.Equals(ruleId))
.ToList();
foreach (var matchingRule in allMatchingRules)
{
if (value == ReportDiagnostic.Default)
{
// If the new severity is 'Default' we just delete the entry for the rule from the ruleset file.
// In the absence of an explicit entry in the ruleset file, the rule reverts back to its 'Default'
// severity (so far as the 'current' ruleset file is concerned - the rule's effective severity
// could still be decided by other factors such as project settings or a base ruleset file).
matchingRule.Remove();
}
else
{
matchingRule.Attribute("Action").Value = newAction;
}
}
}
示例12: CSharpProject
public CSharpProject(string projectFile)
{
if (!File.Exists(projectFile))
throw new Exception(string.Format("project file not found \"{0}\"", projectFile));
WriteLine(1, "compile project \"{0}\"", projectFile);
_projectFile = projectFile;
_projectDirectory = Path.GetDirectoryName(projectFile);
_projectDocument = XDocument.Load(projectFile);
_frameworkDirectory = GetValue("FrameworkDirectory");
WriteLine(2, " framework directory : \"{0}\"", _frameworkDirectory);
_assemblyName = GetValue("AssemblyName");
WriteLine(2, " assembly name : \"{0}\"", _assemblyName);
string outputDirectory = PathCombine(_projectDirectory, GetValue("OutputDirectory"));
WriteLine(2, " output directory : \"{0}\"", outputDirectory);
_languageVersion = GetLanguageVersion(GetValue("LanguageVersion"));
WriteLine(2, " language version : \"{0}\"", _languageVersion);
_outputKind = GetOutputKind(GetValue("OutputKind"));
WriteLine(2, " output kind : \"{0}\"", _outputKind);
_optimizationLevel = GetOptimizationLevel(GetValue("OptimizationLevel"));
WriteLine(2, " optimization level : \"{0}\"", _optimizationLevel);
_platform = GetPlatform(GetValue("Platform"));
WriteLine(2, " platform : \"{0}\"", _platform);
_generalDiagnosticOption = ReportDiagnostic.Default;
WriteLine(2, " general diagnostic option : \"{0}\"", _generalDiagnosticOption);
_warningLevel = 4;
WriteLine(2, " warning level : \"{0}\"", _warningLevel);
_outputPath = PathCombine(outputDirectory, GetValue("OutputPath"));
WriteLine(2, " output path : \"{0}\"", _outputPath);
_pdbPath = PathCombine(outputDirectory, GetValue("PdbPath"));
WriteLine(2, " pdb path : \"{0}\"", _pdbPath);
_win32ResourceFile = PathCombine(_projectDirectory, GetValue("Win32ResourceFile"));
WriteLine(2, " win32 resource file : \"{0}\"", _win32ResourceFile);
_preprocessorSymbols = GetPreprocessorSymbols();
_sourceFiles = GetSources();
_resourceFiles = GetResourceFiles();
_assembliesFiles = GetAssembliesFiles();
}
示例13: RuleSetInclude
/// <summary>
/// Create a RuleSetInclude given the includepath and the effective action.
/// </summary>
public RuleSetInclude(string includePath, ReportDiagnostic action)
{
_includePath = includePath;
_action = action;
}
示例14: SetWarnings
private void SetWarnings(string warnings, ReportDiagnostic reportStyle)
{
if (!string.IsNullOrEmpty(warnings))
{
foreach (var warning in warnings.Split(preprocessorSymbolSeparators, StringSplitOptions.None))
{
int warningId;
if (int.TryParse(warning, out warningId))
{
this.Warnings["CS" + warningId.ToString("0000")] = reportStyle;
}
}
}
}
示例15: AssertSpecificDiagnostics
private static void AssertSpecificDiagnostics(int[] expectedCodes, ReportDiagnostic[] expectedOptions, CSharpCommandLineArguments args)
{
var actualOrdered = args.CompilationOptions.SpecificDiagnosticOptions.OrderBy(entry => entry.Key);
AssertEx.Equal(
expectedCodes.Select(i => MessageProvider.Instance.GetIdForErrorCode(i)),
actualOrdered.Select(entry => entry.Key));
AssertEx.Equal(expectedOptions, actualOrdered.Select(entry => entry.Value));
}