Thread: [cedet-semantic] Semantic search and intellisense completion.
Brought to you by:
zappo
From: Hadron <had...@go...> - 2007-05-07 00:22:39
|
(1) Persistence of semantic completion. If I add this line to some C struct fstab fs; and then try to complete "fs.", it doesn't work. This is fine. So I add #include <fstab.h> Still doesnt complete "fs.". OK, so I visit the file. Bingo! Completion now works. So far as I expected. I then do a semanticdb-save-all-db. So why doesnt it remember the fstab.h completion candidates the next time I open my test file and try to complete "fs."? What does the save function actually save? (2) semantic search There is a blur in my mind between tags and semantic search. Can someone explain how & what the differences are. If I have a few files open, cant I use a semantic search to locate a varable definition? At the moment I use cscope for that. So whats the use of the semantic search functions? They appear to be no more than in "in buffer" search. Does semantic offer a "jump to definition" functionality similar to cscope? thanks for any explanations and/or pointers. -- |
From: Eric M. L. <er...@si...> - 2007-05-10 00:35:10
|
>>> Hadron <had...@go...> seems to think that: > > >(1) Persistence of semantic completion. > >If I add this line to some C > >struct fstab fs; > >and then try to complete "fs.", it doesn't work. This is fine. So I add > >#include <fstab.h> > >Still doesnt complete "fs.". OK, so I visit the file. Bingo! Completion >now works. So far as I expected. > >I then do a semanticdb-save-all-db. So why doesnt it remember the >fstab.h completion candidates the next time I open my test file and try >to complete "fs."? What does the save function actually save? The save function saves tags by directory based on `semanticdb-persistent-path'. Please see the doc to see how to customize it. Since you want to save stuff related to /usr/include type files, you should also investigate the variable `semanticdb-default-save-directory'. The original lookup of fstab.h was skipped as an optimization of the semanticdb search routines due to `semanticdb-find-default-throttle' which has been a source of confusion and bugs recently. The CVS version should be better and more reliable than what is in 1.0pre3. >(2) semantic search > >There is a blur in my mind between tags and semantic search. Can someone >explain how & what the differences are. > >If I have a few files open, cant I use a semantic search to locate a >varable definition? At the moment I use cscope for that. So whats the >use of the semantic search functions? They appear to be no more than in >"in buffer" search. Does semantic offer a "jump to definition" >functionality similar to cscope? > >thanks for any explanations and/or pointers. semantic-search is used by semanticdb-search, which is used by all the completion routines to find the symbols for doing smart completion. You can do raw jumping about with the keybinding (from senator) "C-c . J". Good Luck Eric -- Eric Ludlam: za...@gn..., er...@si... Home: http://www.ludlam.net Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net GNU: www.gnu.org |
From: Jamie M. <jam...@gm...> - 2007-05-15 03:20:10
|
Hi, Hadron, Eric, and others I went through some of the same difficulty with semantic intellisense completion a couple of months ago. i hope that you guys don't mind me putting my two cents in. please correct me on any of these points if i'm wrong first, semantic does require that you include the header file of interest in order to get completion on any symbols. to me this seems to be a nice optimization. by default semantic performs a recursive search through included header files to collect tags for completion, so if your fstab.h header file includes other header files that are needed to perform the completion they will be searched. second, and way more important, usually semantic needs to be able to find the header file itself in the filesystem before it gets it's tags. it needs the full path to the header before it tries to find the tag table for the header in any database. semantic stores tag caches on a directory by directory basis, so it wants the full path to the file to know which directory cache to look in. for system databases, i found that i needed to add the path in manually before creating the database. i put this in my .emacs. (defun semantic-c-mode-hook () (semantic-add-system-include "/path/to/header/files")) (add-hook 'c-mode-common-hook 'semantic-c-mode-hook) (add-hook 'c-mode-hook 'semantic-c-mode-hook) one easy way to make sure that semantic is indeed caching tags and creating system databases correctly is by looking for a file called "semantic.cache" in the directory of interest. it is a text file and you can look through it. by the way, if you try to create a database where you don't have permission to write a file i think it will fail ... i always put this in my .emacs. (setq semanticdb-default-save-directory "/home/directory/.semanticdb") and it stores all of the caches there. finally, if the "unloaded" flag is not set in the semanticdb-find-default-throttle, semantic will not automatically open a header file that it has never seen, even if it has the path to it. Jamie On 5/6/07, Hadron <had...@go...> wrote: > > > (1) Persistence of semantic completion. > > If I add this line to some C > > struct fstab fs; > > and then try to complete "fs.", it doesn't work. This is fine. So I add > > #include <fstab.h> > > Still doesnt complete "fs.". OK, so I visit the file. Bingo! Completion > now works. So far as I expected. > > I then do a semanticdb-save-all-db. So why doesnt it remember the > fstab.h completion candidates the next time I open my test file and try > to complete "fs."? What does the save function actually save? > > (2) semantic search > > There is a blur in my mind between tags and semantic search. Can someone > explain how & what the differences are. > > If I have a few files open, cant I use a semantic search to locate a > varable definition? At the moment I use cscope for that. So whats the > use of the semantic search functions? They appear to be no more than in > "in buffer" search. Does semantic offer a "jump to definition" > functionality similar to cscope? > > thanks for any explanations and/or pointers. > > > -- > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > cedet-semantic mailing list > ced...@li... > https://lists.sourceforge.net/lists/listinfo/cedet-semantic > |
From: Jamie M. <ma...@cs...> - 2007-05-15 03:26:09
|
Hi, Hadron, Eric, and others I went through some of the same difficulty with semantic intellisense completion a couple of months ago. i hope that you guys don't mind me putting my two cents in. please correct me on any of these points if i'm wrong first, semantic does require that you include the header file of interest in order to get completion on any symbols. to me this seems to be a nice optimization. by default semantic performs a recursive search through included header files to collect tags for completion, so if your fstab.h header file includes other header files that are needed to perform the completion they will be searched. second, and way more important, usually semantic needs to be able to find the header file itself in the filesystem before it gets it's tags. it needs the full path to the header before it tries to find the tag table for the header in any database. semantic stores tag caches on a directory by directory basis, so it wants the full path to the file to know which directory cache to look in. for system databases, i found that i needed to add the path in manually before creating the database. i put this in my .emacs. (defun semantic-c-mode-hook () (semantic-add-system-include "/path/to/header/files")) (add-hook 'c-mode-common-hook 'semantic-c-mode-hook) (add-hook 'c-mode-hook 'semantic-c-mode-hook) one easy way to make sure that semantic is indeed caching tags and creating system databases correctly is by looking for a file called "semantic.cache" in the directory of interest. it is a text file and you can look through it. by the way, if you try to create a database where you don't have permission to write a file i think it will fail ... i always put this in my .emacs. (setq semanticdb-default-save-directory "/home/directory/.semanticdb") and it stores all of the caches there. finally, if the "unloaded" flag is not set in the semanticdb-find-default-throttle, semantic will not automatically open a header file that it has never seen, even if it has the path to it. Jamie On 5/6/07, Hadron <had...@go...> wrote: > > > (1) Persistence of semantic completion. > > If I add this line to some C > > struct fstab fs; > > and then try to complete "fs.", it doesn't work. This is fine. So I add > > #include <fstab.h> > > Still doesnt complete "fs.". OK, so I visit the file. Bingo! Completion > now works. So far as I expected. > > I then do a semanticdb-save-all-db. So why doesnt it remember the > fstab.h completion candidates the next time I open my test file and try > to complete "fs."? What does the save function actually save? > > (2) semantic search > > There is a blur in my mind between tags and semantic search. Can someone > explain how & what the differences are. > > If I have a few files open, cant I use a semantic search to locate a > varable definition? At the moment I use cscope for that. So whats the > use of the semantic search functions? They appear to be no more than in > "in buffer" search. Does semantic offer a "jump to definition" > functionality similar to cscope? > > thanks for any explanations and/or pointers. > > > -- > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > cedet-semantic mailing list > ced...@li... > https://lists.sourceforge.net/lists/listinfo/cedet-semantic > |
From: Hadron <had...@go...> - 2007-05-15 10:05:16
|
"Jamie Macbeth" <jam...@gm...> writes: > Hi, Hadron, Eric, and others > > I went through some of the same difficulty with semantic intellisense > completion a couple of months ago. i hope that you guys don't mind me > putting my two cents in. please correct me on any of these points if > i'm wrong > > first, semantic does require that you include the header file of > interest in order to get completion on any symbols. to me this seems The file must be re-opened too which is a pain to be honest. Eric has indicated he might change this in the future. I would sooner wait for 10 seconds when I open a C program than have to manually track and open each header file which includes values I wish to complete on. > to be a nice optimization. by default semantic performs a recursive > search through included header files to collect tags for completion, > so if your fstab.h header file includes other header files that are > needed to perform the completion they will be searched. A recent correspondence suggests that some of the clever c wizardry in the Linux headers might just not be handled properly at the moment by semantic parser :( (What *do* the Linux app programmers use for completion etc ?). Surely not that java horror Eclipse :-; ? > > second, and way more important, usually semantic needs to be able to > find the header file itself in the filesystem before it gets it's > tags. it needs the full path to the header before it tries to find > the tag table for the header in any database. semantic stores tag > caches on a directory by directory basis, so it wants the full path to > the file to know which directory cache to look in. > > for system databases, i found that i needed to add the path in > manually before creating the database. i put this in my .emacs. > > (defun semantic-c-mode-hook () > (semantic-add-system-include "/path/to/header/files")) > (add-hook 'c-mode-common-hook 'semantic-c-mode-hook) > (add-hook 'c-mode-hook 'semantic-c-mode-hook) I pointed this to the root of my (local) Linux header hierarchy and still no joy. > > one easy way to make sure that semantic is indeed caching tags and > creating system databases correctly is by looking for a file called > "semantic.cache" in the directory of interest. it is a text file and > you can look through it. by the way, if you try to create a database > where you don't have permission to write a file i think it will fail > ... i always put this in my .emacs. > > (setq semanticdb-default-save-directory "/home/directory/.semanticdb") Yup - I had that since at one stage I didnt keep a local copy. > > and it stores all of the caches there. > > finally, if the "unloaded" flag is not set in the > semanticdb-find-default-throttle, semantic will not automatically open > a header file that it has never seen, even if it has the path to it. I believe from earlier comments from Eric that this is broken. I have a situation at the moment where even if I open the file of interest (in my local Linux header hierarchy) it is not parsing and creating a cache file which makes me wonder if I have to add each and every directory to the system-include? The paths confuse me. I see no real reason to differentiate between "system headers" and "project headers". Simply have a set of paths each of which is the root of a hierarchy to search - and an option to follow symbolic links. I would say that how semantic locates files is the most difficult for a noob at the moment. I am pretty sure I read something somewhere in the docs that it ignores certain system files too - but I cant find it again. > > Jamie |
From: Hadron <had...@go...> - 2007-05-15 10:23:43
|
Just while on the subject and Jamie is involved, here is my biggest issue at the moment with regard to paths and selective parsing. In the following "joke/testbed code" notice 1) inclusion of fstab.h. This is in /usr/include. 2) the inclusion of <asm/thread_info.h>. This is in ~/programming/c/linux..... All files have been "cscope'd" for easy file opening from structure references. I open my test file and move to the line "pfstabEntry->". I try inline completion. I do not get the structure values. I open the /usr/include/fstab.h using cscope navigation command, and *then* completion works. Semantic is now aware of fstab. However, if I move to the "pti->" line having opened the thread_info.h file in a similar way, then completion does not work. I know this is going to be down to some path issue, but I tried Jamie's suggestion earlier specifying the complete directory as well as header root for the thread_info file in the c-mode-hook e.g ,---- | (defun semantic-c-mode-hook () | (semantic-add-system-include "/home/programming/c/linux-source-2.6.20/include/asm")) | (add-hook 'c-mode-common-hook 'semantic-c-mode-hook) | (add-hook 'c-mode-hook 'semantic-c-mode-hook) `---- C test Code below. #include <stdio.h> #include <stdlib.h> #include <fstab.h> #include <gtk/gtk.h> #include <sched.h> #include <asm/thread_info.h> #include "filesystems.h" /* START GLOBALS */ /* The head of the fstab copies */ GList * pfstab; struct fstab * pfstabEntry = p; struct thread_info * pti; /* END GLOBALS */ /* release all memory reserved for a temporary fstab structure */ void fstabFreeEntry(gpointer p, gpointer ignore){ pti-> pfstabEntry-> g_free(pfstabEntry->fs_spec); g_free(pfstabEntry->fs_file); g_free(pfstabEntry->fs_vfstype); g_free(pfstabEntry->fs_); g_free(p); } "Jamie Macbeth" <jam...@gm...> writes: > Hi, Hadron, Eric, and others > > I went through some of the same difficulty with semantic intellisense > completion a couple of months ago. i hope that you guys don't mind me > putting my two cents in. please correct me on any of these points if > i'm wrong > > first, semantic does require that you include the header file of > interest in order to get completion on any symbols. to me this seems > to be a nice optimization. by default semantic performs a recursive > search through included header files to collect tags for completion, > so if your fstab.h header file includes other header files that are > needed to perform the completion they will be searched. > > second, and way more important, usually semantic needs to be able to > find the header file itself in the filesystem before it gets it's > tags. it needs the full path to the header before it tries to find > the tag table for the header in any database. semantic stores tag > caches on a directory by directory basis, so it wants the full path to > the file to know which directory cache to look in. > > for system databases, i found that i needed to add the path in > manually before creating the database. i put this in my .emacs. > > (defun semantic-c-mode-hook () > (semantic-add-system-include "/path/to/header/files")) > (add-hook 'c-mode-common-hook 'semantic-c-mode-hook) > (add-hook 'c-mode-hook 'semantic-c-mode-hook) > > one easy way to make sure that semantic is indeed caching tags and > creating system databases correctly is by looking for a file called > "semantic.cache" in the directory of interest. it is a text file and > you can look through it. by the way, if you try to create a database > where you don't have permission to write a file i think it will fail > ... i always put this in my .emacs. > > (setq semanticdb-default-save-directory "/home/directory/.semanticdb") > > and it stores all of the caches there. > > finally, if the "unloaded" flag is not set in the > semanticdb-find-default-throttle, semantic will not automatically open > a header file that it has never seen, even if it has the path to it. > > Jamie > > > On 5/6/07, Hadron <had...@go...> wrote: >> >> >> (1) Persistence of semantic completion. >> >> If I add this line to some C >> >> struct fstab fs; >> >> and then try to complete "fs.", it doesn't work. This is fine. So I add >> >> #include <fstab.h> >> >> Still doesnt complete "fs.". OK, so I visit the file. Bingo! Completion >> now works. So far as I expected. >> >> I then do a semanticdb-save-all-db. So why doesnt it remember the >> fstab.h completion candidates the next time I open my test file and try >> to complete "fs."? What does the save function actually save? >> >> (2) semantic search >> >> There is a blur in my mind between tags and semantic search. Can someone >> explain how & what the differences are. >> >> If I have a few files open, cant I use a semantic search to locate a >> varable definition? At the moment I use cscope for that. So whats the >> use of the semantic search functions? They appear to be no more than in >> "in buffer" search. Does semantic offer a "jump to definition" >> functionality similar to cscope? >> >> thanks for any explanations and/or pointers. >> >> >> -- >> >> ------------------------------------------------------------------------- >> This SF.net email is sponsored by DB2 Express >> Download DB2 Express C - the FREE version of DB2 express and take >> control of your XML. No limits. Just data. Click to get it now. >> http://sourceforge.net/powerbar/db2/ >> _______________________________________________ >> cedet-semantic mailing list >> ced...@li... >> https://lists.sourceforge.net/lists/listinfo/cedet-semantic >> > -- |
From: Eric M. L. <er...@si...> - 2007-05-15 15:31:02
|
Hi, Thanks for your example. I use a relatively vanilla cedet install procedure in my .emacs file with my development version of CEDET active. At this time, I don't have many active changes over what is in CVS. I did the following: 1) Start a fresh emacs 2) Put your sample in /tmp/test.cpp 3) Used M-x semantic-analyze-possible-completions on the two lines you indicated. I did not get completions. 4) M-x semanticdb-create-ebrowse-database RET /usr/include/ RET (This took a little while to finish. 5) Verified that completions are listed correctly on the two lines you indicated. You should be able to do the same. I'm using Emacs 22 from CVS from a couple months back. Ebrowse had changed a little between that and Emacs 21. Hopefully the semantic code will work between those two versions. Eric >>> Hadron <had...@go...> seems to think that: > >Just while on the subject and Jamie is involved, here is my biggest >issue at the moment with regard to paths and selective parsing. In the >following "joke/testbed code" notice > >1) inclusion of fstab.h. This is in /usr/include. >2) the inclusion of <asm/thread_info.h>. This is in >~/programming/c/linux..... > >All files have been "cscope'd" for easy file opening from structure references. > >I open my test file and move to the line "pfstabEntry->". I try inline >completion. I do not get the structure values. I open the >/usr/include/fstab.h using cscope navigation command, and *then* >completion works. Semantic is now aware of fstab. > >However, if I move to the "pti->" line having opened the thread_info.h >file in a similar way, then completion does not work. I know this is >going to be down to some path issue, but I tried Jamie's suggestion >earlier specifying the complete directory as well as header root for the >thread_info file in the c-mode-hook e.g > >,---- >| (defun semantic-c-mode-hook () >| (semantic-add-system-include "/home/programming/c/linux-source-2.6.20/include/asm")) >| (add-hook 'c-mode-common-hook 'semantic-c-mode-hook) >| (add-hook 'c-mode-hook 'semantic-c-mode-hook) >`---- > > >C test Code below. > > >#include <stdio.h> >#include <stdlib.h> >#include <fstab.h> >#include <gtk/gtk.h> >#include <sched.h> >#include <asm/thread_info.h> > >#include "filesystems.h" > >/* START GLOBALS */ >/* The head of the fstab copies */ >GList * pfstab; >struct fstab * pfstabEntry = p; >struct thread_info * pti; >/* END GLOBALS */ > > >/* release all memory reserved for a temporary fstab structure */ >void fstabFreeEntry(gpointer p, gpointer ignore){ > pti-> > pfstabEntry-> > g_free(pfstabEntry->fs_spec); > g_free(pfstabEntry->fs_file); > g_free(pfstabEntry->fs_vfstype); > g_free(pfstabEntry->fs_); > g_free(p); >} > [ ... ] -- Eric Ludlam: za...@gn..., er...@si... Home: http://www.ludlam.net Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net GNU: www.gnu.org |