private static void ChekArray(CodeGenArray arrayInfo, CheckingIndex index) { if (arrayInfo.ItemType == "Length") { index.Errors.Add($"Type with name `{arrayInfo.ItemType}` can't be stored in an array"); } }
public (string[] Errors, string[] Warnings) CheckNaming(CodeGenData data) { var index = new CheckingIndex(); foreach (var typeGenInfo in data.Types) { CheckTypeName(typeGenInfo.Name, index); switch (typeGenInfo) { case CodeGenEnum enumGenInfo: CheckEnum(enumGenInfo, index); break; case CodeGenArray arrayGenInfo: ChekArray(arrayGenInfo, index); break; case CodeGenStruct structGenInfo: ChekStruct(structGenInfo, index); break; default: throw new Exception("Unknown data type"); } } return(index.Errors.ToArray(), index.Warnings.ToArray()); }
private static void CheckEnum(CodeGenEnum enumInfo, CheckingIndex index) { foreach (var item in enumInfo.Items) { if (Keywords.Contains(item.Name)) { index.Errors.Add($"Enum item `{enumInfo.Name}.{item.Name}` has the same name with a C# keyword"); } } index.Enums.Add(enumInfo.Name); }
private static void CheckTypeName(string type, CheckingIndex index) { if (Keywords.Contains(type)) { index.Errors.Add($"Type `{type}` has the same name with a C# keyword"); } if (type == "SizeOf") { index.Errors.Add($"Type name `{type}` is forbidden"); } if (type.StartsWith("_")) { index.Warnings.Add($"Type `{type}` starts with `_`. It can cause name clashes in a generated code"); } }
private static void ChekStruct(CodeGenStruct structInfo, CheckingIndex index) { foreach (var field in structInfo.Fields) { if (Keywords.Contains(structInfo.Name)) { index.Errors.Add($"Field `{structInfo.Name}.{field.Name}` has the same name with a C# keyword"); } if (field.Name == "SizeOf") { index.Errors.Add($"Field `{structInfo.Name}.{field.Name}` has forbidden name"); } if (field.Name.StartsWith("_")) { index.Warnings.Add($"Field name `{structInfo.Name}.{field.Name}` starts with `_`. " + $"It can cause name clashes in a generated code"); } } }