public static CodeChangeType ClassifyCodeChangeType(string current, string old)
        {
            IDiffer differ = new Differ();
            SideBySideDiffBuilder builder = new SideBySideDiffBuilder(differ);

            var diffModel = builder.BuildDiffModel(old, current);

            CodeChangeType t = CodeChangeType.None;

            for (var i = 0; i < diffModel.NewText.Lines.Count; i++)
            {
                var newLine = diffModel.NewText.Lines[i];
                var oldLine = diffModel.OldText.Lines[i];

                if (newLine.Type == ChangeType.Inserted)
                {
                    t |= ChangeHelper.InsertedLineType(newLine);
                }
                else if (newLine.Type == ChangeType.Modified)
                {
                    t |= ChangeHelper.ModifiedLineType(oldLine, newLine);
                }
                else if (oldLine.Type == ChangeType.Deleted)
                {
                    t |= ChangeHelper.RemovedLineType(oldLine);
                }
            }

            return(t);
        }
        private static CodeChangeType classifyChangeType(TokenType tokens)
        {
            CodeChangeType t = CodeChangeType.None;

            if ((tokens & TokenType.Comment) != 0)
            {
                t |= CodeChangeType.Documentation;
            }

            if ((tokens & TokenType.ProcedureCall) != 0 || (tokens & TokenType.Operator) != 0 || (tokens & TokenType.Assignment) != 0)
            {
                t |= CodeChangeType.Assignment;
            }

            if ((tokens & TokenType.ClassDefinition) != 0 || (tokens & TokenType.MethodDefinition) != 0 || (tokens & TokenType.DataTypeDefinition) != 0)
            {
                t |= CodeChangeType.Interface;
            }

            if ((tokens & TokenType.DataTypeDefinition) != 0)
            {
                t |= CodeChangeType.Data;
            }

            if ((tokens & TokenType.IfStatement) != 0 || (tokens & TokenType.TryStatement) != 0 || (tokens & TokenType.CatchStatement) != 0)
            {
                t |= CodeChangeType.Checking;
            }

            if ((tokens & TokenType.Assignment) != 0)
            {
                t |= CodeChangeType.Function;
            }

            if ((tokens & TokenType.ForStatement) != 0 || (tokens & TokenType.IfStatement) != 0 || (tokens & TokenType.WhileStatement) != 0 || (tokens & TokenType.SwitchStatement) != 0)
            {
                t |= CodeChangeType.Function;
            }

            return(t);
        }
 public void ResetType()
 {
     Type = _clone.Type;
 }