Beispiel #1
0
        public static ValueTable AddTableWithSyntax(this ValueTable table, string name)
        {
            // Create a new table and matching syntax
            var newSyntaxTable = new TableSyntax(name);
            var newTable       = new ValueTable()
            {
                MirrorSyntax = newSyntaxTable,
            };

            // Add the model to the parent table model
            table.Add(name, new Value(newTable));

            // Add the new syntax to the parent table syntax
            switch (table.MirrorSyntax)
            {
            case DocumentSyntax documentSyntax:
                documentSyntax.Tables.Add(newSyntaxTable);
                break;

            default:
                throw new InvalidOperationException("Unknown Syntax on ValueTable");
            }

            return(newTable);
        }
 public override SyntaxNode VisitTable(TableSyntax node)
 {
     if ((this.NodeInSpan(node)) && (node.Members != null) && (node.Members.Count > 0) && (!node.ContainsDiagnostics))
     {
         node = node.WithMembers(this.Sort(node.Members));
     }
     return(base.VisitTable(node));
 }
        public TableSyntaxBase GetOrCreateNamespace([NotNull] string key)
        {
            var t = GetTable(key);

            if (t != null)
            {
                return(t);
            }

            t = new TableSyntax(key);
            _toml.Tables.Add(t);

            return(t);
        }
Beispiel #4
0
        public override void Visit(TableSyntax table)
        {
            if (_currentValue != null)
            {
                throw new InvalidOperationException("An Table value must not have an active value.");
            }

            // A direct table reference is always from the root
            _currentTable = _rootTable;

            // Resolve the key
            var(currentTable, valueName) = ResolveKey(table.Name);
            _currentTable = GetTable(currentTable, valueName, false);

            base.Visit(table);
        }
Beispiel #5
0
        public TableTypeInformation(TableSyntax tableSyntax) : this(tableSyntax.GetNameStringValue())
        {
            FieldListSyntax fields = tableSyntax.Fields;

            if (fields != null)
            {
                SyntaxList <FieldSyntax> fieldsList = fields.Fields;
                if (fieldsList != null)
                {
                    foreach (FieldSyntax fieldSyntax in fieldsList)
                    {
                        TableFieldTypeInformation fieldTypeInformation = new TableFieldTypeInformation(fieldSyntax);
                        Add(fieldTypeInformation);
                    }
                }
            }
        }
        private static void AnalyzeTableFieldsIDs(SyntaxNodeAnalysisContext context)
        {
            TableSyntax   tableSyntax = context.Node as TableSyntax;
            KeyListSyntax keys        = tableSyntax.Keys;
            List <String> keysList    = GetPrimaryKeyFieldsNames(keys);

            if (keysList == null)
            {
                return;
            }
            FieldListSyntax          fieldList = tableSyntax.Fields;
            SyntaxList <FieldSyntax> fields    = fieldList.Fields;

            foreach (FieldSyntax fieldSyntax in fields)
            {
                IdentifierNameSyntax fieldName = fieldSyntax.Name;
                SyntaxToken          FieldNo   = fieldSyntax.No;
                if (FieldNo.Value as int? < 20 && !keysList.Contains(fieldName.Identifier.Value.ToString()))
                {
                    ReportFieldsReservedForPrimaryKeyFields(context, FieldNo.GetLocation(), fieldName.Identifier.Value.ToString(), fieldName);
                }
            }
        }
        public override SyntaxNode VisitTable(TableSyntax node)
        {
            PropertySyntax propertySyntax = node.GetProperty("DataClassification");

            if (propertySyntax == null)
            {
                NoOfChanges++;
                node = node.AddPropertyListProperties(
                    this.CreateDataClassificationProperty(node));
            }
            else
            {
                string valueText = propertySyntax.Value.ToString();
                if ((String.IsNullOrWhiteSpace(valueText)) ||
                    (valueText.Equals("ToBeClassified", StringComparison.CurrentCultureIgnoreCase)))
                {
                    NoOfChanges++;
                    node = node.ReplaceNode(propertySyntax, this.CreateDataClassificationProperty(node));
                }
            }

            return(base.VisitTable(node));
        }
        private static void SaveClass(Type type, DocumentSyntax document, KeySyntax key = null)
        {
            key ??= new KeySyntax(type.Name);

            var fields   = type.GetFields(StaticFlags);
            var children = type.GetNestedTypes(StaticFlags);

            var table      = new TableSyntax(key);
            var tableItems = table.Items;

            foreach (var field in fields)
            {
                if (field.IsPrivate || field.IsInitOnly || !field.IsStatic || field.IsLiteral)
                {
                    continue;
                }

                if (field.GetCustomAttribute <Config.ConfigIgnoreAttribute>() != null)
                {
                    continue;
                }

                ValueSyntax value      = null;
                object      fieldValue = field.GetValue(null);

                switch (fieldValue)
                {
                case string v:
                    value = new StringValueSyntax(v);
                    break;

                case sbyte v:
                    value = new IntegerValueSyntax(v);
                    break;

                case byte v:
                    value = new IntegerValueSyntax(v);
                    break;

                case short v:
                    value = new IntegerValueSyntax(v);
                    break;

                case ushort v:
                    value = new IntegerValueSyntax(v);
                    break;

                case int v:
                    value = new IntegerValueSyntax(v);
                    break;

                case uint v:
                    value = new IntegerValueSyntax(v);
                    break;

                case ulong v:
                    value = new IntegerValueSyntax(unchecked ((long)v));
                    break;

                case float v:
                    value = new FloatValueSyntax(v);
                    break;

                case double v:
                    value = new FloatValueSyntax(v);
                    break;

                case bool v:
                    value = new BooleanValueSyntax(v);
                    break;

                default:
                    if (fieldValue is List <string> slist)
                    {
                        value = new ArraySyntax(slist.ToArray());
                    }
                    else if (fieldValue is List <int> ilist)
                    {
                        value = new ArraySyntax(ilist.ToArray());
                    }
                    else if (fieldValue.GetType().IsEnum)
                    {
                        value = new StringValueSyntax(fieldValue.GetType().GetEnumName(fieldValue));
                    }
                    break;
                }

                if (value == null)
                {
                    continue;
                }

                var keyValue = new KeyValueSyntax(
                    field.Name,
                    value
                    );

                //if (field.GetAttribute<Config.CommentAttribute>(out var attribute)) {
                //keyValue.GetChildren(Math.Max(0, keyValue.ChildrenCount - 2)).AddComment(attribute.Message);
                //}

                tableItems.Add(keyValue);
            }

            if (table.Items.ChildrenCount != 0)
            {
                document.Tables.Add(table);
            }

            foreach (var child in children)
            {
                if (child.IsNestedPrivate)
                {
                    continue;
                }
                if (child.GetCustomAttribute <Config.ConfigIgnoreAttribute>() != null)
                {
                    continue;
                }
                var childKey  = new KeySyntax(typeof(Config).Name);
                var parentKey = key.ToString().Split('.');
                if (parentKey.Length != 0)
                {
                    parentKey[0] = null;
                }
                foreach (var subKey in parentKey)
                {
                    if (subKey == null)
                    {
                        continue;
                    }
                    childKey.DotKeys.Add(new DottedKeyItemSyntax(subKey));
                }
                childKey.DotKeys.Add(new DottedKeyItemSyntax(child.Name));
                SaveClass(child, document, childKey);
            }
        }
Beispiel #9
0
        public void TestDocument()
        {
            var table = new TableSyntax("test")
            {
                Items =
                {
                    { "a",                                          1 },
                    { "b",              true                          },
                    { "c",              "Check"                       },
                    { "d",              "ToEscape\nWithAnotherChar\t" },
                    { "e",                                       12.5 },
                    { "f",              new int[] { 1, 2, 3, 4        } },
                    { "g",              new string[] { "0", "1", "2"  } },
                    { "key with space",                             2 }
                }
            };

            var doc = new DocumentSyntax()
            {
                Tables =
                {
                    table
                }
            };

            table.AddLeadingComment("This is a comment");
            table.AddLeadingTriviaNewLine();

            var firstElement = table.Items.GetChildren(0);

            firstElement.AddTrailingComment("This is an item comment");

            var secondElement = table.Items.GetChildren(2);

            secondElement.AddLeadingTriviaNewLine();
            secondElement.AddLeadingComment("This is a comment in a middle of a table");
            secondElement.AddLeadingTriviaNewLine();
            secondElement.AddLeadingTriviaNewLine();

            var docStr = doc.ToString();

            var expected = @"# This is a comment
[test]
a = 1 # This is an item comment
b = true

# This is a comment in a middle of a table

c = ""Check""
d = ""ToEscape\nWithAnotherChar\t""
e = 12.5
f = [1, 2, 3, 4]
g = [""0"", ""1"", ""2""]
""key with space"" = 2
";

            AssertHelper.AreEqualNormalizeNewLine(expected, docStr);

            // Reparse the result and compare it again
            var newDoc = Toml.Parse(docStr);

            AssertHelper.AreEqualNormalizeNewLine(expected, newDoc.ToString());
        }
 public override void Visit(TableSyntax table)
 {
     _currentTable = _rootTable;
     _currentTable = SetKeyValue(table.Name, null, table.Kind);
     base.Visit(table);
 }