public SQDeclaration Parse(ITextBuffer buffer, out bool newversion)
        {
            string filepath = SQLanguageServiceEX.GetFileName(buffer);

            SQDeclaration.SQFile file = (SQDeclaration.SQFile)RegisterFileDeclaration(filepath);
            if (file != null)
            {
                var    snapshot   = buffer.CurrentSnapshot;
                int    version    = snapshot.Version.VersionNumber;
                int    oldversion = file.FileVersion;
                string src        = snapshot.GetText();
                if (file.FileVersion < version)
                {
                    //Compile(src, ref error);
                    file.Parse(src, version);
                }
                newversion = oldversion != file.FileVersion;
            }
            else
            {
                newversion = false;
            }

            return(file);
        }
 public SQDeclaration Parse(string buffer, string filepath, out bool newversion)
 {
     SQDeclaration.SQFile file = (SQDeclaration.SQFile)RegisterFileDeclaration(filepath);
     if (file != null)
     {
         int version = file.FileVersion;
         if (file.FileVersion < 0)
         {
             //Compile(buffer, ref error);
             file.Parse(buffer, 1);
             //TODO!
         }
         newversion = version != file.FileVersion;
     }
     else
     {
         newversion = false;
     }
     return(file);
 }
        SQDeclaration RegisterFileDeclaration(string filepath)
        {
            SQDeclaration.SQFile file = null;
            int id = this.Children.FindIndex(x => { return(x.Key == filepath); });

            if (id != -1)
            {
                SQDeclare kvp = this.Children[id];
                file = kvp.Value as SQDeclaration.SQFile;
            }
            else
            {
                SQDeclare kvp = new SQDeclare(filepath, file = new SQFile(_version)
                {
                    Name = filepath, Parent = this, Url = filepath
                });
                this.Children.Add(kvp);
            }

            return(file);
        }