- /// [CanBeNull] object Test() => null;
- ///
- /// void UseTest() {
- /// var p = Test();
- /// var s = p.ToString(); // Warning: Possible 'System.NullReferenceException'
- /// }
- ///
+/// [CanBeNull] object Test() => null;
+///
+/// void UseTest() {
+/// var p = Test();
+/// var s = p.ToString(); // Warning: Possible 'System.NullReferenceException'
+/// }
+///
- /// [NotNull] object Foo() {
- /// return null; // Warning: Possible 'null' assignment
- /// }
- ///
+/// [NotNull] object Foo() {
+/// return null; // Warning: Possible 'null' assignment
+/// }
+///
- /// public void Foo([ItemNotNull]List<string> books)
- /// {
- /// foreach (var book in books) {
- /// if (book != null) // Warning: Expression is always true
- /// Console.WriteLine(book.ToUpper());
- /// }
- /// }
- ///
+/// public void Foo([ItemNotNull]List<string> books)
+/// {
+/// foreach (var book in books) {
+/// if (book != null) // Warning: Expression is always true
+/// Console.WriteLine(book.ToUpper());
+/// }
+/// }
+///
- /// public void Foo([ItemCanBeNull]List<string> books)
- /// {
- /// foreach (var book in books)
- /// {
- /// // Warning: Possible 'System.NullReferenceException'
- /// Console.WriteLine(book.ToUpper());
- /// }
- /// }
- ///
+/// public void Foo([ItemCanBeNull]List<string> books)
+/// {
+/// foreach (var book in books)
+/// {
+/// // Warning: Possible 'System.NullReferenceException'
+/// Console.WriteLine(book.ToUpper());
+/// }
+/// }
+///
- /// [StringFormatMethod("message")]
- /// void ShowError(string message, params object[] args) { /* do something */ }
- ///
- /// void Foo() {
- /// ShowError("Failed: {0}"); // Warning: Non-existing argument in format string
- /// }
- ///
+/// [StringFormatMethod("message")]
+/// void ShowError(string message, params object[] args) { /* do something */ }
+///
+/// void Foo() {
+/// ShowError("Failed: {0}"); // Warning: Non-existing argument in format string
+/// }
+///
- /// void LogInfo([StructuredMessageTemplate]string message, params object[] args) { /* do something */ }
- ///
- /// void Foo() {
- /// LogInfo("User created: {username}"); // Warning: Non-existing argument in format string
- /// }
- ///
+/// void LogInfo([StructuredMessageTemplate]string message, params object[] args) { /* do something */ }
+///
+/// void Foo() {
+/// LogInfo("User created: {username}"); // Warning: Non-existing argument in format string
+/// }
+///
- /// namespace TestNamespace
- /// {
- /// public class Constants
- /// {
- /// public static int INT_CONST = 1;
- /// public const string STRING_CONST = "1";
- /// }
- ///
- /// public class Class1
- /// {
- /// [ValueProvider("TestNamespace.Constants")] public int myField;
- /// public void Foo([ValueProvider("TestNamespace.Constants")] string str) { }
- ///
- /// public void Test()
- /// {
- /// Foo(/*try completion here*/);//
- /// myField = /*try completion here*/
- /// }
- /// }
- /// }
- ///
+/// namespace TestNamespace
+/// {
+/// public class Constants
+/// {
+/// public static int INT_CONST = 1;
+/// public const string STRING_CONST = "1";
+/// }
+///
+/// public class Class1
+/// {
+/// [ValueProvider("TestNamespace.Constants")] public int myField;
+/// public void Foo([ValueProvider("TestNamespace.Constants")] string str) { }
+///
+/// public void Test()
+/// {
+/// Foo(/*try completion here*/);//
+/// myField = /*try completion here*/
+/// }
+/// }
+/// }
+///
- /// void Foo([ValueRange(0, 100)] int value) {
- /// if (value == -1) { // Warning: Expression is always 'false'
- /// ...
- /// }
- /// }
- ///
+/// void Foo([ValueRange(0, 100)] int value) {
+/// if (value == -1) { // Warning: Expression is always 'false'
+/// ...
+/// }
+/// }
+///
- /// void Foo([NonNegativeValue] int value) {
- /// if (value == -1) { // Warning: Expression is always 'false'
- /// ...
- /// }
- /// }
- ///
+/// void Foo([NonNegativeValue] int value) {
+/// if (value == -1) { // Warning: Expression is always 'false'
+/// ...
+/// }
+/// }
+///
- /// void Foo(string param) {
- /// if (param == null)
- /// throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol
- /// }
- ///
+/// void Foo(string param) {
+/// if (param == null)
+/// throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol
+/// }
+///
- /// public class Foo : INotifyPropertyChanged {
- /// public event PropertyChangedEventHandler PropertyChanged;
- ///
- /// [NotifyPropertyChangedInvocator]
- /// protected virtual void NotifyChanged(string propertyName) { ... }
- ///
- /// string _name;
- ///
- /// public string Name {
- /// get { return _name; }
- /// set { _name = value; NotifyChanged("LastName"); /* Warning */ }
- /// }
- /// }
- ///
- /// Examples of generated notifications:
- ///
+/// public class Foo : INotifyPropertyChanged {
+/// public event PropertyChangedEventHandler PropertyChanged;
+///
+/// [NotifyPropertyChangedInvocator]
+/// protected virtual void NotifyChanged(string propertyName) { ... }
+///
+/// string _name;
+///
+/// public string Name {
+/// get { return _name; }
+/// set { _name = value; NotifyChanged("LastName"); /* Warning */ }
+/// }
+/// }
+///
+/// Examples of generated notifications:
+/// Function Definition Table syntax:
- ///
- /// [ContractAnnotation("=> halt")]
- /// public void TerminationMethod()
- ///
- /// [ContractAnnotation("null <= param:null")] // reverse condition syntax
- /// public string GetName(string surname)
- ///
- /// [ContractAnnotation("s:null => true")]
- /// public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty()
- ///
- /// // A method that returns null if the parameter is null,
- /// // and not null if the parameter is not null
- /// [ContractAnnotation("null => null; notnull => notnull")]
- /// public object Transform(object data)
- ///
- /// [ContractAnnotation("=> true, result: notnull; => false, result: null")]
- /// public bool TryParse(string s, out Person result)
- ///
Function Definition Table syntax:
+///
+/// [ContractAnnotation("=> halt")]
+/// public void TerminationMethod()
+///
+/// [ContractAnnotation("null <= param:null")] // reverse condition syntax
+/// public string GetName(string surname)
+///
+/// [ContractAnnotation("s:null => true")]
+/// public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty()
+///
+/// // A method that returns null if the parameter is null,
+/// // and not null if the parameter is not null
+/// [ContractAnnotation("null => null; notnull => notnull")]
+/// public object Transform(object data)
+///
+/// [ContractAnnotation("=> true, result: notnull; => false, result: null")]
+/// public bool TryParse(string s, out Person result)
+///
- /// [LocalizationRequiredAttribute(true)]
- /// class Foo {
- /// string str = "my string"; // Warning: Localizable string
- /// }
- ///
+/// [LocalizationRequiredAttribute(true)]
+/// class Foo {
+/// string str = "my string"; // Warning: Localizable string
+/// }
+///
- /// [CannotApplyEqualityOperator]
- /// class NoEquality { }
- ///
- /// class UsesNoEquality {
- /// void Test() {
- /// var ca1 = new NoEquality();
- /// var ca2 = new NoEquality();
- /// if (ca1 != null) { // OK
- /// bool condition = ca1 == ca2; // Warning
- /// }
- /// }
- /// }
- ///
+/// [CannotApplyEqualityOperator]
+/// class NoEquality { }
+///
+/// class UsesNoEquality {
+/// void Test() {
+/// var ca1 = new NoEquality();
+/// var ca2 = new NoEquality();
+/// if (ca1 != null) { // OK
+/// bool condition = ca1 == ca2; // Warning
+/// }
+/// }
+/// }
+///
- /// [BaseTypeRequired(typeof(IComponent)] // Specify requirement
- /// class ComponentAttribute : Attribute { }
- ///
- /// [Component] // ComponentAttribute requires implementing IComponent interface
- /// class MyComponent : IComponent { }
- ///
+/// [BaseTypeRequired(typeof(IComponent)] // Specify requirement
+/// class ComponentAttribute : Attribute { }
+///
+/// [Component] // ComponentAttribute requires implementing IComponent interface
+/// class MyComponent : IComponent { }
+///
- /// [UsedImplicitly]
- /// public class TypeConverter {}
- ///
- /// public class SummaryData
- /// {
- /// [UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)]
- /// public SummaryData() {}
- /// }
- ///
- /// [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors | ImplicitUseTargetFlags.Default)]
- /// public interface IService {}
- ///
+/// [UsedImplicitly]
+/// public class TypeConverter {}
+///
+/// public class SummaryData
+/// {
+/// [UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)]
+/// public SummaryData() {}
+/// }
+///
+/// [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors | ImplicitUseTargetFlags.Default)]
+/// public interface IService {}
+///
- /// [Pure] int Multiply(int x, int y) => x * y;
- ///
- /// void M() {
- /// Multiply(123, 42); // Warning: Return value of pure method is not used
- /// }
- ///
+/// [Pure] int Multiply(int x, int y) => x * y;
+///
+/// void M() {
+/// Multiply(123, 42); // Warning: Return value of pure method is not used
+/// }
+///
[MustUseReturnValue("Use the return value to...")]
.
- /// [MustUseReturnValue("Use the return value to...")]
.
+///
- /// class Foo {
- /// [ProvidesContext] IBarService _barService = ...;
- ///
- /// void ProcessNode(INode node) {
- /// DoSomething(node, node.GetGlobalServices().Bar);
- /// // ^ Warning: use value of '_barService' field
- /// }
- /// }
- ///
+/// class Foo {
+/// [ProvidesContext] IBarService _barService = ...;
+///
+/// void ProcessNode(INode node) {
+/// DoSomething(node, node.GetGlobalServices().Bar);
+/// // ^ Warning: use value of '_barService' field
+/// }
+/// }
+///
+/// [SourceTemplate]
+/// public static void forEach<T>(this IEnumerable<T> xs) {
+/// foreach (var x in xs) {
+/// //$ $END$
+/// }
+/// }
+///
+///
+/// [SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")]
+/// public static void forEach<T>(this IEnumerable<T> collection) {
+/// foreach (var item in collection) {
+/// //$ $END$
+/// }
+/// }
+///
+/// Applying the attribute on a template method parameter:
+///
+/// [SourceTemplate]
+/// public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) {
+/// /*$ var $x$Id = "$newguid$" + x.ToString();
+/// x.DoSomething($x$Id); */
+/// }
+///
+///
- /// [SourceTemplate]
- /// public static void forEach<T>(this IEnumerable<T> xs) {
- /// foreach (var x in xs) {
- /// //$ $END$
- /// }
- /// }
- ///
- ///
- /// [SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")]
- /// public static void forEach<T>(this IEnumerable<T> collection) {
- /// foreach (var item in collection) {
- /// //$ $END$
- /// }
- /// }
- ///
- /// Applying the attribute on a template method parameter:
- ///
- /// [SourceTemplate]
- /// public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) {
- /// /*$ var $x$Id = "$newguid$" + x.ToString();
- /// x.DoSomething($x$Id); */
- /// }
- ///
- ///
- /// [ActionName("Foo")]
- /// public ActionResult Login(string returnUrl) {
- /// ViewBag.ReturnUrl = Url.Action("Foo"); // OK
- /// return RedirectToAction("Bar"); // Error: Cannot resolve action
- /// }
- ///
+/// [ActionName("Foo")]
+/// public ActionResult Login(string returnUrl) {
+/// ViewBag.ReturnUrl = Url.Action("Foo"); // OK
+/// return RedirectToAction("Bar"); // Error: Cannot resolve action
+/// }
+///
- /// public class MyStringCollection : List<string>
- /// {
- /// [CollectionAccess(CollectionAccessType.Read)]
- /// public string GetFirstString()
- /// {
- /// return this.ElementAt(0);
- /// }
- /// }
- /// class Test
- /// {
- /// public void Foo()
- /// {
- /// // Warning: Contents of the collection is never updated
- /// var col = new MyStringCollection();
- /// string x = col.GetFirstString();
- /// }
- /// }
- ///
+/// public class MyStringCollection : List<string>
+/// {
+/// [CollectionAccess(CollectionAccessType.Read)]
+/// public string GetFirstString()
+/// {
+/// return this.ElementAt(0);
+/// }
+/// }
+/// class Test
+/// {
+/// public void Foo()
+/// {
+/// // Warning: Contents of the collection is never updated
+/// var col = new MyStringCollection();
+/// string x = col.GetFirstString();
+/// }
+/// }
+///
- /// static void ThrowIfNull<T>([NoEnumeration] T v, string n) where T : class
- /// {
- /// // custom check for null but no enumeration
- /// }
- ///
- /// void Foo(IEnumerable<string> values)
- /// {
- /// ThrowIfNull(values, nameof(values));
- /// var x = values.ToList(); // No warnings about multiple enumeration
- /// }
- ///
+/// static void ThrowIfNull<T>([NoEnumeration] T v, string n) where T : class
+/// {
+/// // custom check for null but no enumeration
+/// }
+///
+/// void Foo(IEnumerable<string> values)
+/// {
+/// ThrowIfNull(values, nameof(values));
+/// var x = values.ToList(); // No warnings about multiple enumeration
+/// }
+///