コード例 #1
0
 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");
     }
 }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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");
            }
        }
コード例 #5
0
        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");
                }
            }
        }