Re: Typecache does not contain include tags created at expansion
Steven Rémot <[email protected]> Wed, 21 Jan 2015 23:01:11 +0100
| Newsgroups | gmane.emacs.cedet |
|---|---|
| Message-ID | <CAJt2sO10e=_umXxBseiMiNs-cHE6pa2A58M4cpGLHbhHzy5WNQ@mail.gmail.com> |
Just a little update: I could make semantic load the include tags by including semantic/bovine/c package in contrib/wisent-php. I will try to understand why it works when I load C support, in order to make wisent-php work by itself. 2015-01-04 15:25 GMT+01:00 Steven Rémot <[email protected]>: > Le 03/01/2015 21:20, Eric Ludlam a écrit : > > Using the 'dump' feature should force the include stream to be filled, so > there is some other reason why it is empty. Since 'dependents' has an > entry, I'll assume that is your include tag. It is possible that since > you are developing your grammar as you go, some buffers are in different > parsing states. I recently patched CEDET in bzr (and now git) back in.. > November? to better update buffers when you compile your grammar. > > Thanks for your answer Eric. The entry in dependents is a scope cache > containing the include tag and other thing. Here is the result of the > typecache dump a bit more unfolded : > > ]#<semanticdb-typecache /<project > dir>/src/AnotherNs/SuperGreeterCaller.php> > ] Name: "/<project dir>/src/AnotherNs/SuperGreeterCaller.php" > ] Class: #'semanticdb-typecache > ] filestream #<TAG LIST: 1 entries> > * AnotherNs : namespace > ] includestream : nil > ] stream : nil > ] dependants #<list o' stuff: 1 entries> > > #<semantic-scope-cache Cache> > ] Name: "Cache" > ] Class: #'semantic-scope-cache > ] :table #<semanticdb-table SuperGreeterCaller.php (1 tags)> > ] tag +callSuperGreeter > ] scopetypes : nil > ] parents #<TAG LIST: 2 entries> > ] parentinheritance : nil > ] scope #<TAG LIST: 4 entries> > ] fullscope #<TAG LIST: 6 entries> > * +callSuperGreeter > * SuperGreeterCaller : class > * /<project dir>/src/NewNs/SuperGreeter.php > * Greeter : use > * AnotherNs : namespace > * SuperGreeterCaller : class > ] localargs #<TAG LIST: 1 entries> > ] localvar #<TAG LIST: 4 entries> > ] typescope : nil > > If you need it, you can reproduce my problem by installing php-mode (easy > through MELPA), and then use these commands to checkout my code and run my > ERT tests with "emacs -q" : > > git clone https://bitbucket.org/stevenremot/cedet > cd cedet > git checkout php-tests > make > cd contrib > make > cd tests/php > sh run-test.sh > > 2 tests should fail, "wisent-php-argument-completion-through-alias", and > "wisent-php-in-depth-completion". If you then go to the buffer > "SuperGreeterCaller.php", you can get the same result than me with > "semanticdb-typecache-dump". > > > A way to check is to get the above output, immediately visit the included > file, and use 'bovinate' in there to see what the content is. If it has no > types, it won't be in the typecache. If it does, and you go back and > re-request the typecache and the content is there, then there is some > update issue. Those are puzzling to debug. > > I checked, and bovinate returns the expected types. > > > In your output, I notice that you tags are saved in :members in an order > different than the text of the parsed buffer. Is that a cut and paste > error in your email, or is that real? I also noticed the output excludes > an positional information, either in [ start end ] or overlay form. Is > that on purpose? > > I think the reverse order in :members is not done on purpose. Would it be > better to put them on the right order ? Also, I stripped position > information to ease reading in the mail, but if you need it I can give you > the full result of bovinate. > > > > Lastly, if "use" acts both as include and using statement, you could try > can use wisent-php-expand-tag to convert the include to also be a 'using' > statement at the same location. That way the scope calculation engine > could identify and convert "Greeter" into the other type when found. I'm > guessing a bit about that, so you could just wait until you need it to give > it a try. > > In the PHP semantics, "use" behaves only as a using statement, but as > there is no explicit "include" in modern PHP, using it as an include > statement too seems to be the best thing I can do to include the aliased > type in the scope. I currently generate a compound "alias" tag in the > grammar (because you can write "use A as B, C as D;"), and then for each > aliasing I generate a type tag and an include tag as shown in my last mail. > It is the result of experimentation of various methods until I find one > that works perfectly, so if there a more elegant way do this I'm totally > willing to use it. > > I can't find anything about the "using" tag in the manual. I already saw > it in the code for C++ support, is this tag specific to this language ? > > Thank you again for your help. > > ------------------------------------------------------------------------------ New Year. New Location. New Benefits. New Data Center in Ashburn, VA. GigeNET is offering a free month of service with a new server in Ashburn. Choose from 2 high performing configs, both with 100TB of bandwidth. Higher redundancy.Lower latency.Increased capacity.Completely compliant. http://p.sf.net/sfu/gigenet _______________________________________________ Cedet-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/cedet-devel