01上传
This commit is contained in:
267
Assets/01.CodeChecker/Editor/Rules/CheckClass.cs
Normal file
267
Assets/01.CodeChecker/Editor/Rules/CheckClass.cs
Normal file
@@ -0,0 +1,267 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using UnityEngine;
|
||||
|
||||
namespace wvdet.CodeChecker
|
||||
{
|
||||
/// <summary>
|
||||
/// Class [类] 命名规范
|
||||
/// 使用 Pascal Case。
|
||||
/// 使用名词或者名词性词组命名。
|
||||
/// 文件名应和类名相同。
|
||||
/// 不要轻易使用缩写。
|
||||
/// 不使用type前缀。
|
||||
/// 比如,C来标识Class。
|
||||
/// 比如,使用FileStream而不是CFileStream。
|
||||
/// 不使用下划线。
|
||||
/// 在合适的时候,使用单词复合来标识从某个基类继承而来。
|
||||
/// 比如,xxxException。
|
||||
/// 同一功能下,可以考虑同一命名前缀。
|
||||
/// </summary>
|
||||
public class CheckClass : ICheckable
|
||||
{
|
||||
public List<Detail> Check(string filepath, CompilationUnitSyntax root)
|
||||
{
|
||||
var results = new List<Detail>();
|
||||
var classDecs = root.DescendantNodes().OfType<ClassDeclarationSyntax>().ToList();
|
||||
foreach (var dec in classDecs)
|
||||
{
|
||||
CheckClassName(dec, results);
|
||||
CheckProperty(dec, results);
|
||||
CheckField(dec, results);
|
||||
CheckMethod(dec, results);
|
||||
}
|
||||
|
||||
var filename = Path.GetFileNameWithoutExtension(filepath);
|
||||
if (classDecs.Count > 0 && classDecs.All(x => x.Identifier.ValueText != filename))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
guideline = "文件名应和类名相同",
|
||||
});
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
private static void CheckClassName(ClassDeclarationSyntax dec, List<Detail> results)
|
||||
{
|
||||
var identifier = dec.Identifier.ValueText;
|
||||
var lineNumber = dec.GetLocation().GetLineSpan().StartLinePosition.Line;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(identifier, lineNumber, out var ret))
|
||||
results.Add(ret);
|
||||
|
||||
if (char.IsLower(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier),
|
||||
guideline = "类名必须使用PascalCase",
|
||||
});
|
||||
}
|
||||
|
||||
if (identifier[0] == '_')
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier.Substring(1)),
|
||||
guideline = "类名禁用以下划线开始",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Static Field [静态变量] 命名规范
|
||||
/// 使用 Pascal Case。
|
||||
/// 使用名词、名词性词组或者名词地缩写来命名静态变量。
|
||||
/// 不要在静态变量名称中使用匈牙利命名法[变量名=属性+类型+对象描述]。
|
||||
/// 在任何可能的情况下推荐你使用静态properties[属性]而不是public static fields。
|
||||
/// </summary>
|
||||
private static void CheckField(ClassDeclarationSyntax dec, List<Detail> results)
|
||||
{
|
||||
var fields = dec.DescendantNodes().OfType<FieldDeclarationSyntax>();
|
||||
foreach (var field in fields)
|
||||
{
|
||||
var modifiers = field.Modifiers;
|
||||
var isConst = modifiers.Any(x => x.IsKind(SyntaxKind.ConstKeyword));
|
||||
var isPublic = modifiers.Any(x => x.IsKind(SyntaxKind.PublicKeyword));
|
||||
var isStatic = modifiers.Any(x => x.IsKind(SyntaxKind.StaticKeyword));
|
||||
var identifier = field.GetIdentifier().ValueText;
|
||||
var lineNumber = field.GetLocation().GetLineSpan().StartLinePosition.Line;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(identifier, lineNumber, out var ret))
|
||||
results.Add(ret);
|
||||
|
||||
if (isConst)
|
||||
{
|
||||
if (identifier.Any(char.IsLower))
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = field.GetFieldGreenText(),
|
||||
guideline = "Const Field[常量]全大写命名,下划线分隔。例如:SCENE_CAMERA。",
|
||||
});
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isPublic)
|
||||
{
|
||||
if (isStatic && char.IsLower(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = field.GetFieldGreenText(),
|
||||
guideline = "public静态变量首字母必须大写",
|
||||
});
|
||||
}
|
||||
else if (!isStatic && char.IsUpper(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = field.GetFieldGreenText(),
|
||||
guideline = "public字段首字母必须小写",
|
||||
});
|
||||
}
|
||||
}
|
||||
else //私有
|
||||
{
|
||||
if (char.IsUpper(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = field.GetFieldGreenText(),
|
||||
guideline = "private及protected字段首字母必须小写",
|
||||
});
|
||||
}
|
||||
|
||||
var declarator = field.GetPredefined();
|
||||
if (declarator != null)
|
||||
{
|
||||
if (declarator.Keyword.IsKind(SyntaxKind.BoolKeyword) &&
|
||||
(identifier.Length < 3 || !identifier.StartsWith("is")))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
line = lineNumber,
|
||||
codeSnippet = field.GetFieldGreenText(),
|
||||
guideline = "private及protected布尔字段应以is开始,如isFileFound",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (identifier.TrimStart('_').Contains('_'))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
line = lineNumber,
|
||||
codeSnippet = field.GetFieldGreenText(),
|
||||
guideline = "private及protected中间不使用下划线(如:isPlayer)",
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckMethod(ClassDeclarationSyntax dec, List<Detail> results)
|
||||
{
|
||||
var methods = dec.DescendantNodes().OfType<MethodDeclarationSyntax>();
|
||||
foreach (var method in methods)
|
||||
{
|
||||
var identifier = method.Identifier.ValueText;
|
||||
var lineNumber = method.GetLocation().GetLineSpan().StartLinePosition.Line;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(identifier, lineNumber, out var ret))
|
||||
results.Add(ret);
|
||||
|
||||
if (!char.IsUpper(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier),
|
||||
guideline = "方法名必须使用PascalCase",
|
||||
});
|
||||
}
|
||||
|
||||
method.ParameterList.Parameters.ToList().ForEach(parameter =>
|
||||
{
|
||||
var parameterName = parameter.Identifier.ValueText;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(parameterName, lineNumber, out var ret2))
|
||||
results.Add(ret2);
|
||||
|
||||
if (!char.IsLower(parameterName[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = parameter.GetText().ToString().Trim(),
|
||||
guideline = "方法参数名必须使用小写字母开始",
|
||||
});
|
||||
}
|
||||
|
||||
if (identifier.Contains('_'))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = parameter.GetText().ToString().Trim(),
|
||||
guideline = "方法参数名禁止包含下划线(_)",
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckProperty(ClassDeclarationSyntax dec, List<Detail> results)
|
||||
{
|
||||
var properties = dec.DescendantNodes().OfType<PropertyDeclarationSyntax>();
|
||||
foreach (var property in properties)
|
||||
{
|
||||
var identifier = property.Identifier.ValueText;
|
||||
var lineNumber = property.GetLocation().GetLineSpan().StartLinePosition.Line;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(identifier, lineNumber, out var ret))
|
||||
results.Add(ret);
|
||||
|
||||
if (!char.IsUpper(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = property.GetText().ToString().Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier),
|
||||
guideline = "属性名须使用Camel Case命名",
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/01.CodeChecker/Editor/Rules/CheckClass.cs.meta
Normal file
3
Assets/01.CodeChecker/Editor/Rules/CheckClass.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9e1aa528e5c547b19c2aa56a2ea6f9d9
|
||||
timeCreated: 1627451393
|
||||
80
Assets/01.CodeChecker/Editor/Rules/CheckEnum.cs
Normal file
80
Assets/01.CodeChecker/Editor/Rules/CheckEnum.cs
Normal file
@@ -0,0 +1,80 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
|
||||
namespace wvdet.CodeChecker
|
||||
{
|
||||
/// <summary>
|
||||
/// Enumeration Type [枚举] 命名规范
|
||||
/// 使用 Pascal Case。
|
||||
/// 不要在Enum类型名称后面加上Enum后缀。(自己定义其他后缀)
|
||||
/// 对于大多数Enum类型使用单数名称,仅仅在这个Enum类型是位域地时候使用复数形式。
|
||||
/// 如果是用于位域的枚举,那么结尾加上FlagsAttribute。
|
||||
/// </summary>
|
||||
public class CheckEnum : ICheckable
|
||||
{
|
||||
public List<Detail> Check(string filepath, CompilationUnitSyntax root)
|
||||
{
|
||||
var results = new List<Detail>();
|
||||
|
||||
var enumDecls = root.DescendantNodes().OfType<EnumDeclarationSyntax>();
|
||||
foreach (var dec in enumDecls)
|
||||
{
|
||||
var identifier = dec.Identifier.ValueText;
|
||||
var lineNumber = dec.GetLocation().GetLineSpan().StartLinePosition.Line;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(identifier, lineNumber, out var ret))
|
||||
results.Add(ret);
|
||||
|
||||
if (char.IsLower(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier),
|
||||
guideline = "枚举类型名必须使用PascalCase",
|
||||
});
|
||||
}
|
||||
|
||||
if (identifier[0] == 'I')
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase("I" + identifier),
|
||||
guideline = "在interface名称前加上字母I来表示type是interface。(如:ICinfig)",
|
||||
});
|
||||
}
|
||||
|
||||
if (identifier[0] == '_')
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier.Substring(1)),
|
||||
guideline = "枚举类型名禁用以下划线开始",
|
||||
});
|
||||
}
|
||||
|
||||
if (identifier.EndsWith("Enum"))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
guideline = "不要在Enum类型名称后面加上Enum后缀。(自己定义其他后缀)",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/01.CodeChecker/Editor/Rules/CheckEnum.cs.meta
Normal file
3
Assets/01.CodeChecker/Editor/Rules/CheckEnum.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 596a7b1543c54c8c8263ffd334c191d6
|
||||
timeCreated: 1627456962
|
||||
82
Assets/01.CodeChecker/Editor/Rules/CheckInterface.cs
Normal file
82
Assets/01.CodeChecker/Editor/Rules/CheckInterface.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
|
||||
namespace wvdet.CodeChecker
|
||||
{
|
||||
/// <summary>
|
||||
/// Interface [接口] 命名规范
|
||||
/// 使用 Pascal Case。
|
||||
/// 使用名词或者名词性词组命名接口。
|
||||
/// 不要轻易使用缩写。
|
||||
/// 在interface 名称前加上字母I来表示type是interface。(如:ICinfig)
|
||||
/// 不使用下划线。
|
||||
/// 文件名应和类名相同。
|
||||
/// </summary>
|
||||
public class CheckInterface : ICheckable
|
||||
{
|
||||
public List<Detail> Check(string filepath, CompilationUnitSyntax root)
|
||||
{
|
||||
var results = new List<Detail>();
|
||||
|
||||
var interfaceDecs = root.DescendantNodes().OfType<InterfaceDeclarationSyntax>().ToList();
|
||||
foreach (var dec in interfaceDecs)
|
||||
{
|
||||
var identifier = dec.Identifier.ValueText;
|
||||
var lineNumber = dec.GetLocation().GetLineSpan().StartLinePosition.Line;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(identifier, lineNumber, out var ret))
|
||||
results.Add(ret);
|
||||
|
||||
if (!char.IsLower(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier),
|
||||
guideline = "接口类型名必须使用PascalCase",
|
||||
});
|
||||
}
|
||||
|
||||
if (identifier[0] == 'I')
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase("I" + identifier),
|
||||
guideline = "在interface名称前加上字母I来表示type是interface。(如:ICinfig)",
|
||||
});
|
||||
}
|
||||
|
||||
if (identifier[0] == '_')
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase(identifier.Substring(1)),
|
||||
guideline = "接口名禁用以下划线开始",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var filename = Path.GetFileNameWithoutExtension(filepath);
|
||||
if (interfaceDecs.Count > 0 && interfaceDecs.All(x => x.Identifier.ValueText != filename))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
guideline = "文件名应和类名相同",
|
||||
});
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dce22fd599b943c58611ed31371778a6
|
||||
timeCreated: 1627456321
|
||||
38
Assets/01.CodeChecker/Editor/Rules/CheckNamespace.cs
Normal file
38
Assets/01.CodeChecker/Editor/Rules/CheckNamespace.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
|
||||
namespace wvdet.CodeChecker
|
||||
{
|
||||
public class CheckNamespace : ICheckable
|
||||
{
|
||||
private static List<string> Forbiddens = new List<string>()
|
||||
{
|
||||
//针对于禁用的命名空间放在此处
|
||||
// "System.Linq",
|
||||
|
||||
};
|
||||
|
||||
public List<Detail> Check(string filepath, CompilationUnitSyntax root)
|
||||
{
|
||||
var results = new List<Detail>();
|
||||
|
||||
var usings = root.DescendantNodes().OfType<UsingDirectiveSyntax>();
|
||||
foreach (var us in usings)
|
||||
{
|
||||
var ns = us.Name.ToString();
|
||||
if (Forbiddens.Contains(ns))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = us.GetLocation().GetLineSpan().StartLinePosition.Line + 1,
|
||||
guideline = $"禁用此命名空间:{ns}",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8779cc1ce7674a8da69644ca6f980f1e
|
||||
timeCreated: 1638409766
|
||||
82
Assets/01.CodeChecker/Editor/Rules/CheckStruct.cs
Normal file
82
Assets/01.CodeChecker/Editor/Rules/CheckStruct.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
|
||||
namespace wvdet.CodeChecker
|
||||
{
|
||||
/// <summary>
|
||||
/// Struct [结构体] 命名规范
|
||||
/// 使用 Pascal Case。
|
||||
/// 使用名词或者名词性词组命名接口。
|
||||
/// 不要轻易使用缩写。
|
||||
/// 在struct 名称前加上字母S来表示type是在struct。(如:SData)
|
||||
/// 不使用下划线。
|
||||
/// 文件名应和类名相同。
|
||||
/// </summary>
|
||||
public class CheckStruct : ICheckable
|
||||
{
|
||||
public List<Detail> Check(string filepath, CompilationUnitSyntax root)
|
||||
{
|
||||
var results = new List<Detail>();
|
||||
|
||||
var interfaceDecs = root.DescendantNodes().OfType<StructDeclarationSyntax>().ToList();
|
||||
foreach (var dec in interfaceDecs)
|
||||
{
|
||||
var identifier = dec.Identifier.ValueText;
|
||||
var lineNumber = dec.GetLocation().GetLineSpan().StartLinePosition.Line;
|
||||
|
||||
if (CheckerUtils.IsChineseIdentifier(identifier, lineNumber, out var ret))
|
||||
results.Add(ret);
|
||||
|
||||
if (!char.IsLower(identifier[0]))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase("S" + identifier),
|
||||
guideline = "结构体类型名必须使用PascalCase",
|
||||
});
|
||||
}
|
||||
|
||||
else if (identifier[0] != 'S')
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase("S" + identifier),
|
||||
guideline = "在struct名称前加上字母S来表示type是struct。(如:SData)",
|
||||
});
|
||||
}
|
||||
|
||||
else if (identifier[0] == '_')
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Error,
|
||||
line = lineNumber,
|
||||
codeSnippet = identifier.Trim(),
|
||||
suggestion = CheckerUtils.ConvertPascalCase("S" + identifier.Substring(1)),
|
||||
guideline = "结构体名禁用以下划线开始",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var filename = Path.GetFileNameWithoutExtension(filepath);
|
||||
if (interfaceDecs.Count > 0 && interfaceDecs.All(x => x.Identifier.ValueText != filename))
|
||||
{
|
||||
results.Add(new Detail
|
||||
{
|
||||
level = Level.Warning,
|
||||
guideline = "文件名应和类名相同",
|
||||
});
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/01.CodeChecker/Editor/Rules/CheckStruct.cs.meta
Normal file
3
Assets/01.CodeChecker/Editor/Rules/CheckStruct.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 569ca7d7c88102e4b81629916b323157
|
||||
timeCreated: 1627456321
|
||||
10
Assets/01.CodeChecker/Editor/Rules/ICheckable.cs
Normal file
10
Assets/01.CodeChecker/Editor/Rules/ICheckable.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
|
||||
namespace wvdet.CodeChecker
|
||||
{
|
||||
public interface ICheckable
|
||||
{
|
||||
List<Detail> Check(string filepath, CompilationUnitSyntax root);
|
||||
}
|
||||
}
|
||||
3
Assets/01.CodeChecker/Editor/Rules/ICheckable.cs.meta
Normal file
3
Assets/01.CodeChecker/Editor/Rules/ICheckable.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6fff035c37d84e09a40da28d1b2fd4ed
|
||||
timeCreated: 1638409121
|
||||
29
Assets/01.CodeChecker/Editor/Rules/Result.cs
Normal file
29
Assets/01.CodeChecker/Editor/Rules/Result.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace wvdet.CodeChecker
|
||||
{
|
||||
public enum Level
|
||||
{
|
||||
Hint,
|
||||
Warning,
|
||||
Error,
|
||||
}
|
||||
|
||||
public class Result
|
||||
{
|
||||
public string filepath;
|
||||
public int warningCount;
|
||||
public int errorCount;
|
||||
|
||||
public List<Detail> details = new List<Detail>();
|
||||
}
|
||||
|
||||
public class Detail
|
||||
{
|
||||
public int line = -1;
|
||||
public Level level;
|
||||
public string suggestion;
|
||||
public string guideline;
|
||||
public string codeSnippet;
|
||||
}
|
||||
}
|
||||
11
Assets/01.CodeChecker/Editor/Rules/Result.cs.meta
Normal file
11
Assets/01.CodeChecker/Editor/Rules/Result.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0e11fadaa49ef9d4882d5453490b6830
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user