Thread: [cedet-semantic] question about semantic smart completion
Brought to you by:
zappo
From: yupeng82921 <yup...@16...> - 2008-12-03 16:46:36
|
hello. I have two questions about semantic smart completion. 1. When I call "semantic-ia-complete-symbol-menu", it will show a pop up menu. But unless I select an option form it, the menu will not disappear. In fact, I want to find a function, when I call it, it can show a pop up menu, and I can select a symbol to comple, but if I do not want to select anyone, I can still insert character to the current buffer. If there is a function like this, I can bind it to every key on my keyboard, so whenever I insert a character, I can always get a completion menu. Is there a function let me do this? 2. It seems that semantic can only analyze the current file and its head file. If I want to write a function that never be declared in the current file, semantic can not comple it. But gnu global can do this. So I want to add global's completion result to the semantic pop up menu, could you tell me how could I do that? Additionally, maybe there are some redundance between semantic and global, I also want to re-arrange the completion result, could you tell me how to do that? Or is there other simple method? Thanks. |
From: bread <bre...@gm...> - 2008-12-04 01:53:27
|
Hi, Plz check the inline comments. :) On Thu, Dec 4, 2008 at 12:46 AM, yupeng82921 <yup...@16...> wrote: > hello. > > I have two questions about semantic smart completion. > > 1. When I call "semantic-ia-complete-symbol-menu", it will show a pop up > menu. But unless I select an option form it, the menu will not disappear. In > fact, I want to find a function, when I call it, it can show a pop up menu, > and I can select a symbol to comple, but if I do not want to select anyone, > I can still insert character to the current buffer. If there is a function > like this, I can bind it to every key on my keyboard, so whenever I insert a > character, I can always get a completion menu. Is there a function let me do > this? > If you do not wanna do anything after poping up the completion menu, just 'C-g' will help you to close it and continue your typing. Speak of the completion menu, maybe you can try completion-ui or company-mode, both of which can be found on Emacs wiki. > > > 2. It seems that semantic can only analyze the current file and its head > file. If I want to write a function that never be declared in the current > file, semantic can not comple it. But gnu global can do this. So I want to > add global's completion result to the semantic pop up menu, could you tell > me how could I do that? Additionally, maybe there are some redundance > between semantic and global, I also want to re-arrange the completion > result, could you tell me how to do that? Or is there other simple method? > Actually, as what i think, semantic is much more intelligent than only analyzing current buffer and its head file. From my experience on semantic, at least, several files below can be analyzed. 1. system lib, such as standard library. In the latest version of CEDET(from CVS), the header files of standard library will be analyzed by default, you even need not write this in your configuration file: (semantic-add-system-include "/usr/include/" 'c++-mode) 2. the head files in the same directory can be found automatically. For example, you write a main.cpp including a.h, where a.h includes b.h, where b.h ..... As long as they are stored in the same directory, all the header files can be found by semantic when you typing in main.cpp and try to get completions. 3. If you need another lib, let's say boost as an example. Since you can't put your codes in the same directory as boost, you can do this to teach semantic to analyze boost library and provide you completions whenever you want. (semantic-add-system-include "WHERE_YOUR_BOOST_IS" 'c++-mode) To be honest, there's also one thing for me that i'm confused, as long as i can see, i'm sure of the 3 things above. But sometimes i found i can get the completions from a header file, which was neither in system lib, nor in semantic-add-sytem-include directory, and i didn't put it in the same directory as my cpp, either. I don't know why semantic can do so, maybe what i thought and wrote before is totally wrong, and i'm really eager to know what the semantic-analyze-mechanism is. > > Thanks. > > > Thanks. -- Zhiqiu Kong (孔直秋) EDA Labs Dept. Computer Science & Technology Tsinghua University P.R China 100084 |
From: Wei W. <ww...@ac...> - 2008-12-04 17:43:06
|
bread wrote: > > Hi, > > > > Plz check the inline comments. :) > > > > On Thu, Dec 4, 2008 at 12:46 AM, yupeng82921 <yup...@16... > > <mailto:yup...@16...>> wrote: > > > > hello. > > > > I have two questions about semantic smart completion. > > > > 1. When I call "semantic-ia-complete-symbol-menu", it will show a > > pop up menu. But unless I select an option form it, the menu will > > not disappear. In fact, I want to find a function, when I call it, > > it can show a pop up menu, and I can select a symbol to comple, but > > if I do not want to select anyone, I can still insert character to > > the current buffer. If there is a function like this, I can bind it > > to every key on my keyboard, so whenever I insert a character, I can > > always get a completion menu. Is there a function let me do this? > > > > > > If you do not wanna do anything after poping up the completion menu, > > just 'C-g' will help you to close it and continue your typing. > > > > Speak of the completion menu, maybe you can try completion-ui or > > company-mode, both of which can be found on Emacs wiki. > > This might sound like a really dumb question, but I have been bothered by it for a while. :) How do I choose a result in the completion menu, without clicking using mouse? If I use keyboard up/down key, it always goes up/down in the buffer, without cycling through the completions. > > > > > > 2. It seems that semantic can only analyze the current file and its > > head file. If I want to write a function that never be declared in > > the current file, semantic can not comple it. But gnu global can do > > this. So I want to add global's completion result to the semantic > > pop up menu, could you tell me how could I do that? Additionally, > > maybe there are some redundance between semantic and global, I also > > want to re-arrange the completion result, could you tell me how to > > do that? Or is there other simple method? > > > > > > Actually, as what i think, semantic is much more intelligent than only > > analyzing current buffer and its head file. From my experience on > > semantic, at least, several files below can be analyzed. > > > > 1. system lib, such as standard library. In the latest version of > > CEDET(from CVS), the header files of standard library will be analyzed > > by default, you even need not write this in your configuration file: > > (semantic-add-system-include "/usr/include/" 'c++-mode) How do I go about adding multiple system include directories? Thanks Wei |
From: yupeng82921 <yup...@16...> - 2008-12-04 14:10:21
|
Thank you for your reply. I will go to wiki and look for the completion-ui. And my reason to use gnu global is because I want to complete a function which is never declared in the current file. It seems do not allow in C++ program but sometimes will happen in C program. 在2008-12-04,bread <bre...@gm...> 写道: Hi, Plz check the inline comments. :) On Thu, Dec 4, 2008 at 12:46 AM, yupeng82921 <yup...@16...> wrote: hello. I have two questions about semantic smart completion. 1. When I call "semantic-ia-complete-symbol-menu", it will show a pop up menu. But unless I select an option form it, the menu will not disappear. In fact, I want to find a function, when I call it, it can show a pop up menu, and I can select a symbol to comple, but if I do not want to select anyone, I can still insert character to the current buffer. If there is a function like this, I can bind it to every key on my keyboard, so whenever I insert a character, I can always get a completion menu. Is there a function let me do this? If you do not wanna do anything after poping up the completion menu, just 'C-g' will help you to close it and continue your typing. Speak of the completion menu, maybe you can try completion-ui or company-mode, both of which can be found on Emacs wiki. 2. It seems that semantic can only analyze the current file and its head file. If I want to write a function that never be declared in the current file, semantic can not comple it. But gnu global can do this. So I want to add global's completion result to the semantic pop up menu, could you tell me how could I do that? Additionally, maybe there are some redundance between semantic and global, I also want to re-arrange the completion result, could you tell me how to do that? Or is there other simple method? Actually, as what i think, semantic is much more intelligent than only analyzing current buffer and its head file. From my experience on semantic, at least, several files below can be analyzed. 1. system lib, such as standard library. In the latest version of CEDET(from CVS), the header files of standard library will be analyzed by default, you even need not write this in your configuration file: (semantic-add-system-include "/usr/include/" 'c++-mode) 2. the head files in the same directory can be found automatically. For example, you write a main.cpp including a.h, where a.h includes b.h, where b.h ..... As long as they are stored in the same directory, all the header files can be found by semantic when you typing in main.cpp and try to get completions. 3. If you need another lib, let's say boost as an example. Since you can't put your codes in the same directory as boost, you can do this to teach semantic to analyze boost library and provide you completions whenever you want. (semantic-add-system-include "WHERE_YOUR_BOOST_IS" 'c++-mode) To be honest, there's also one thing for me that i'm confused, as long as i can see, i'm sure of the 3 things above. But sometimes i found i can get the completions from a header file, which was neither in system lib, nor in semantic-add-sytem-include directory, and i didn't put it in the same directory as my cpp, either. I don't know why semantic can do so, maybe what i thought and wrote before is totally wrong, and i'm really eager to know what the semantic-analyze-mechanism is. Thanks. Thanks. -- Zhiqiu Kong (孔直秋) EDA Labs Dept. Computer Science & Technology Tsinghua University P.R China 100084 |
From: Toby C. <ts...@ca...> - 2008-12-05 00:27:33
|
Hi, If you struggle to get the version of completion-UI available from the wiki to work, try the newer version I posted very recently to this list. It doesn't include much in the way of new features over the previous version. But the new bundled completion-ui-examples package has simple instructions on how to install and use it at the top, and includes Semantic support "out of the box". Much easier to use if you're not an Elisp guru! I'll release it very soon, but Semantic users get a sneak preview :) Toby yupeng82921 wrote: > Thank you for your reply. > > I will go to wiki and look for the completion-ui. > > And my reason to use gnu global is because I want to complete a function which is never declared in the current file. It seems do not allow in C++ program but sometimes will happen in C program. > > > > ÔÚ2008-12-04£¬bread <bre...@gm...> дµÀ£º > Hi, > > Plz check the inline comments. :) > > > On Thu, Dec 4, 2008 at 12:46 AM, yupeng82921 <yup...@16...> wrote: > > hello. > > I have two questions about semantic smart completion. > > 1. When I call "semantic-ia-complete-symbol-menu", it will show a pop up menu. But unless I select an option form it, the menu will not disappear. In fact, I want to find a function, when I call it, it can show a pop up menu, and I can select a symbol to comple, but if I do not want to select anyone, I can still insert character to the current buffer. If there is a function like this, I can bind it to every key on my keyboard, so whenever I insert a character, I can always get a completion menu. Is there a function let me do this? > > If you do not wanna do anything after poping up the completion menu, just 'C-g' will help you to close it and continue your typing. > > Speak of the completion menu, maybe you can try completion-ui or company-mode, both of which can be found on Emacs wiki. > > > > > 2. It seems that semantic can only analyze the current file and its head file. If I want to write a function that never be declared in the current file, semantic can not comple it. But gnu global can do this. So I want to add global's completion result to the semantic pop up menu, could you tell me how could I do that? Additionally, maybe there are some redundance between semantic and global, I also want to re-arrange the completion result, could you tell me how to do that? Or is there other simple method? > > Actually, as what i think, semantic is much more intelligent than only analyzing current buffer and its head file. From my experience on semantic, at least, several files below can be analyzed. > > 1. system lib, such as standard library. In the latest version of CEDET(from CVS), the header files of standard library will be analyzed by default, you even need not write this in your configuration file: > (semantic-add-system-include "/usr/include/" 'c++-mode) > > 2. the head files in the same directory can be found automatically. For example, you write a main.cpp including a.h, where a.h includes b.h, where b.h ..... > > As long as they are stored in the same directory, all the header files can be found by semantic when you typing in main.cpp and try to get completions. > > 3. If you need another lib, let's say boost as an example. Since you can't put your codes in the same directory as boost, you can do this to teach semantic to analyze boost library and provide you completions whenever you want. > > (semantic-add-system-include "WHERE_YOUR_BOOST_IS" 'c++-mode) > > To be honest, there's also one thing for me that i'm confused, as long as i can see, i'm sure of the 3 things above. But sometimes i found i can get the completions from a header file, which was neither in system lib, nor in semantic-add-sytem-include directory, and i didn't put it in the same directory as my cpp, either. I don't know why semantic can do so, maybe what i thought and wrote before is totally wrong, and i'm really eager to know what the semantic-analyze-mechanism is. > > > > > Thanks. > > > > > > Thanks. > > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. > The future of the web can't happen without you. Join us at MIX09 to help > pave the way to the Next Web now. Learn more and register at > http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ > > > ------------------------------------------------------------------------ > > _______________________________________________ > cedet-semantic mailing list > ced...@li... > https://lists.sourceforge.net/lists/listinfo/cedet-semantic |
From: Eric M. L. <er...@si...> - 2008-12-05 01:13:34
|
>>> Wei Weng <ww...@ac...> seems to think that: >Eric M. Ludlam wrote: >>>>> Wei Weng <ww...@ac...> seems to think that: >>> bread wrote: >> [ ... ] >>> This might sound like a really dumb question, but I have been bothered by it >>> for a while. :) >>> >>> How do I choose a result in the completion menu, without clicking using mouse? >>> If I use keyboard up/down key, it always goes up/down in the buffer, without >>> cycling through the completions. >> >> How menus behave depends on on the platform you are on. Some >> platforms have keybindings that move the selection, and some don't. >> >> It is generally better to get one of the fancier completion tools >> working that don't use menus for reliability of the UI. >> > >What do you recommend? I tried company-completion and it gives you popup >menus. I am using Linux. [ ... ] I try to use the default Emacs and the CEDET configuration recommended in the install files so I know what the baseline is and I don't accidentally make CEDET depend on anything unusual. As such, I tend to use the senator completion tool, which is "C-c , TAB". It uses smart completion, then a more generic completion if that fails. The next useful version is `semantic-complete-analyze-inline'. It has a few different configurations via the variable `semantic-complete-inline-analyzer-displayor-class'. Lastly, you can enable `semantic-idle-completions-mode' which pops up completion lists automatically in idle time. For a very different kind of interface, an option is either the semantic-speedbar-analysis tool, or perhaps the ECB version. If you want the best-of-the-best, you will have to scan around. The completion-ui that was posted as a suggestion earlier is pretty good. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Eric M. L. <er...@si...> - 2008-12-04 19:44:19
|
>>> Wei Weng <ww...@ac...> seems to think that: >bread wrote: [ ... ] > >This might sound like a really dumb question, but I have been bothered by it >for a while. :) > >How do I choose a result in the completion menu, without clicking using mouse? >If I use keyboard up/down key, it always goes up/down in the buffer, without >cycling through the completions. How menus behave depends on on the platform you are on. Some platforms have keybindings that move the selection, and some don't. It is generally better to get one of the fancier completion tools working that don't use menus for reliability of the UI. [ ... ] >> > Actually, as what i think, semantic is much more intelligent than only >> > analyzing current buffer and its head file. From my experience on >> > semantic, at least, several files below can be analyzed. >> > >> > 1. system lib, such as standard library. In the latest version of >> > CEDET(from CVS), the header files of standard library will be analyzed >> > by default, you even need not write this in your configuration file: >> > (semantic-add-system-include "/usr/include/" 'c++-mode) > >How do I go about adding multiple system include directories? [ ... ] You can call `semantic-gcc-setup' to get it to work automatically if you use GCC. This happens automatically if you are on a known GNU platform, such as gnu/linux. If not, you can add multiple includes as in the example above, such as: (semantic-add-system-include "/usr/include/" 'c-mode) (semantic-add-system-include "/usr/include/X11" 'c-mode) (semantic-add-system-include "/usr/include/Xt" 'c-mode) Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Wei W. <ww...@ac...> - 2008-12-04 23:54:41
|
Eric M. Ludlam wrote: >>>> Wei Weng <ww...@ac...> seems to think that: >> bread wrote: > [ ... ] >> This might sound like a really dumb question, but I have been bothered by it >> for a while. :) >> >> How do I choose a result in the completion menu, without clicking using mouse? >> If I use keyboard up/down key, it always goes up/down in the buffer, without >> cycling through the completions. > > How menus behave depends on on the platform you are on. Some > platforms have keybindings that move the selection, and some don't. > > It is generally better to get one of the fancier completion tools > working that don't use menus for reliability of the UI. > What do you recommend? I tried company-completion and it gives you popup menus. I am using Linux. Thanks Wei |
From: bread <bre...@gm...> - 2008-12-05 04:09:49
|
Hi, On Fri, Dec 5, 2008 at 3:44 AM, Eric M. Ludlam <er...@si...>wrote: > >>> Wei Weng <ww...@ac...> seems to think that: > >bread wrote: > [ ... ] > >> > (semantic-add-system-include "/usr/include/" 'c++-mode) > > > >How do I go about adding multiple system include directories? > [ ... ] > > You can call `semantic-gcc-setup' to get it to work automatically if > you use GCC. This happens automatically if you are on a known GNU > platform, such as gnu/linux. If not, you can add multiple includes as in > the example above, such as: > > (semantic-add-system-include "/usr/include/" 'c-mode) > (semantic-add-system-include "/usr/include/X11" 'c-mode) > (semantic-add-system-include "/usr/include/Xt" 'c-mode) > > So, if one directory full of header files is neither declared here using (semantic-add-system-include ...), nor in the same directory as the file i'm editing, and If i'm not using EDE, Is semantic capable to find the completions? I'm confused because sometimes i found it chould, sometimes not. So what is the mechanism of semantic for looking up the completions? In my opinion, it might do like this: 1. analyze current buffer to find out the type of the symbol you want to get completions for. 2. start looking up in the directories below for all the header files included by current buffer (both direct includes and indirect includes) 1) system include directory (gcc inlcudes and explicitly declared ones using semantic-add-system-include) 2) the same directory of current editing file 3) EDE project include path if it is used. 3. If found, then give the possible completions. Or tell the users there's none. Am i right? -- Zhiqiu Kong (孔直秋) |
From: Eric M. L. <er...@si...> - 2008-12-05 13:22:17
|
>>> bread <bre...@gm...> seems to think that: >Hi, > >On Fri, Dec 5, 2008 at 3:44 AM, Eric M. Ludlam <er...@si...>wrote: > >> >>> Wei Weng <ww...@ac...> seems to think that: >> >bread wrote: >> [ ... ] >> >> > (semantic-add-system-include "/usr/include/" 'c++-mode) >> > >> >How do I go about adding multiple system include directories? >> [ ... ] >> >> You can call `semantic-gcc-setup' to get it to work automatically if >> you use GCC. This happens automatically if you are on a known GNU >> platform, such as gnu/linux. If not, you can add multiple includes as in >> the example above, such as: >> >> (semantic-add-system-include "/usr/include/" 'c-mode) >> (semantic-add-system-include "/usr/include/X11" 'c-mode) >> (semantic-add-system-include "/usr/include/Xt" 'c-mode) >> >> So, if one directory full of header files is neither declared here using >(semantic-add-system-include ...), nor in the same directory as the file i'm >editing, and If i'm not using EDE, Is semantic capable to find the >completions? > >I'm confused because sometimes i found it chould, sometimes not. So what is >the mechanism of semantic for looking up the completions? In my opinion, it >might do like this: > >1. analyze current buffer to find out the type of the symbol you want to get >completions for. >2. start looking up in the directories below for all the header files >included by current buffer (both direct includes and indirect includes) > 1) system include directory (gcc inlcudes and explicitly declared ones >using semantic-add-system-include) > 2) the same directory of current editing file > 3) EDE project include path if it is used. >3. If found, then give the possible completions. Or tell the users there's >none. [ ... ] You're summary is pretty close. If you right-click on an include, and choose "Summarize Includes current buffer", or just do: M-x semantic-decoration-all-include-summary RET you will get the exact list of things Semantic is using to find include files. There are also two completion styles in Semantic. There is "smart" completion, and also a more generic brute-force completion that looks up any old symbol it can find. Some tools start with the smart completion, and if it fails, uses the backup completion. This may be what you are seeing. The brute force completion includes all parsed files in the current buffer, or any databases it can find under the current project, but again only for files it has already parsed. I wanted to wrap up knowledge of what a project is in EDE, and not repeat it for Semantic, so there are a couple of simplified EDE projects you can use to mark the base of a project. I found out I can use GNU Global to do this, so hopefully I'll have a project based on that soon too. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: bread <bre...@gm...> - 2008-12-06 15:48:16
|
Howdy: On Fri, Dec 5, 2008 at 9:22 PM, Eric M. Ludlam <er...@si...>wrote: > >>> bread <bre...@gm...> seems to think that: > >Hi, > [ ... ] > > You're summary is pretty close. If you right-click on an include, and > choose "Summarize Includes current buffer", or just do: > > M-x semantic-decoration-all-include-summary RET Did you mean right-click in Emacs? I just found it did not work for me... Actually when i right clicked on my codes, nothing happened but some blocks are selected. And, there's no semantic-decoration-all-include-summary. What i can find is only semantic-decoration-mode. But i found that semanticdb-find-test-translate-path can output some include files, and i'm not sure if these are the candidates where semantic will look for symbols in. you will get the exact list of things Semantic is using to find > include files. > > There are also two completion styles in Semantic. There is "smart" > completion, and also a more generic brute-force completion that looks > up any old symbol it can find. > > Some tools start with the smart completion, and if it fails, uses the > backup completion. This may be what you are seeing. The brute force > completion includes all parsed files in the current buffer, or any > databases it can find under the current project, but again only for > files it has already parsed. So what semantic-ia-complete-symbol-menu uses both smart and brute-force completions, right? I wanted to wrap up knowledge of what a project is in EDE, and not > repeat it for Semantic, so there are a couple of simplified EDE > projects you can use to mark the base of a project. I found out I can > use GNU Global to do this, so hopefully I'll have a project based on > that soon too. > > 1. I've seen the manual of EDE before and i was wondering that if it is useful for testcase projects. When u need to write hundreds of test cases for a program, you may put every test case in a single directory, and the program's include files in another directory, just like this: testcases/ -> case01 -> case02 -> ... includes/ So i need to create hundreds ede-cpp-projects for every single test case, it's really a time-consuming work. I'm wondering if there's a ede project type for test-cases-like projects. 2. Does semanticdb-project-roots conflict with the paths set in ede projects? If not, which has a higher priority? 3. And, if EDE could automatically analyze Makefile under the same directory with current buffer and added include paths, it will be wonderful! -- Zhiqiu Kong (孔直秋) |
From: Eric M. L. <er...@si...> - 2008-12-06 20:58:51
|
>>> bread <bre...@gm...> seems to think that: [ ... ] >> >> You're summary is pretty close. If you right-click on an include, and >> choose "Summarize Includes current buffer", or just do: >> >> M-x semantic-decoration-all-include-summary RET > >Did you mean right-click in Emacs? I just found it did not work for me... >Actually when i right clicked on my codes, nothing happened but some blocks >are selected. you probably don't have that decoration mode turned off. Add this to your .emacs file: (semantic-load-enable-gaudy-code-helpers) or turn on just the single item: (require 'semantic-decorate-include) It can be handy to see what state semantic is in sometimes. >And, there's no semantic-decoration-all-include-summary. What i can find is >only semantic-decoration-mode. > >But i found that semanticdb-find-test-translate-path can output some include >files, and i'm not sure if these are the candidates where semantic will look >for symbols in. That is the list of include files that Semantic will search through. >you will get the exact list of things Semantic is using to find >> include files. >> >> There are also two completion styles in Semantic. There is "smart" >> completion, and also a more generic brute-force completion that looks >> up any old symbol it can find. >> >> Some tools start with the smart completion, and if it fails, uses the >> backup completion. This may be what you are seeing. The brute force >> completion includes all parsed files in the current buffer, or any >> databases it can find under the current project, but again only for >> files it has already parsed. > > >So what semantic-ia-complete-symbol-menu uses both smart and brute-force >completions, right? Yes. >I wanted to wrap up knowledge of what a project is in EDE, and not >> repeat it for Semantic, so there are a couple of simplified EDE >> projects you can use to mark the base of a project. I found out I can >> use GNU Global to do this, so hopefully I'll have a project based on >> that soon too. >> > >1. I've seen the manual of EDE before and i was wondering that if it is >useful for testcase projects. When u need to write hundreds of test cases >for a program, you may put every test case in a single directory, and the >program's include files in another directory, just like this: > >testcases/ > -> case01 > -> case02 > -> ... >includes/ > >So i need to create hundreds ede-cpp-projects for every single test case, >it's really a time-consuming work. I'm wondering if there's a ede project >type for test-cases-like projects. You have two options. You can create one EDE project each time, or you can write an auto-detect project style yourself. Writing such a custom EDE project is not hard, but it does require some basic Emacs Lisp /EIEIO programming knowledge. A good starting case is ede-emacs.el. This project style automatically detects a file belonging to Emacs, and sets up a project for it. Your project will probably be simpler, but the Emacs one shows how to do the key aspects of handling custom auto-detected projects. >2. Does semanticdb-project-roots conflict with the paths set in ede >projects? If not, which has a higher priority? Semantic first checks semanticdb-project-root-functions, in which EDE installs a hook. Then it checks the base roots, so EDE will go first, but other tools can insert project roots instead. You could write such a custom fcn for your test cases instead of an EDE project type. >3. And, if EDE could automatically analyze Makefile under the same directory >with current buffer and added include paths, it will be wonderful! It could, if someone were to write such a project for EDE. It is likely easier to create custom project styles on a per-case basis, since the format of Makefiles can vary greatly. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: bread <bre...@gm...> - 2008-12-07 12:44:10
|
Hi, On Sun, Dec 7, 2008 at 4:58 AM, Eric M. Ludlam <er...@si...>wrote: > >>> bread <bre...@gm...> seems to think that: > [ ... ] > > you probably don't have that decoration mode turned off. Add this to > your .emacs file: > > (semantic-load-enable-gaudy-code-helpers) > > or turn on just the single item: > > (require 'semantic-decorate-include) > > It can be handy to see what state semantic is in sometimes. I found that gaudy-code-helpers conflict with another addon of Emacs which is called tabbar (it's used to display a tab bar). So finally i used the latter method to make it work. In the includes summary there're lots of include files listed, i'm not surprised at the amount, but i'm curious that what's the searching flow of semantic? Will semantic search the symbol in the order as same as the files are displayed? That's, if you see include summary like this: a.cpp a.hpp iostream And what you need is all in a.hpp, which of the following will semantic choose? 1. first search a.cpp, then a.hpp, then stop (since we've found the symbol) 2. traverse all the files listed above, and finally stop. I want to know the answer because I found it always takes too much time before getting the completions, while most of the time the infos for the completions can be found in the first several files. > [...] > > Eric > > -- > Eric Ludlam: er...@si... > Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net > -- Zhiqiu Kong (孔直秋) |
From: Eric M. L. <er...@si...> - 2008-12-07 16:27:11
|
>>> bread <bre...@gm...> seems to think that: >Hi, > >On Sun, Dec 7, 2008 at 4:58 AM, Eric M. Ludlam <er...@si...>wrote: > >> >>> bread <bre...@gm...> seems to think that: [ ... ] >I found that gaudy-code-helpers conflict with another addon of Emacs which >is called tabbar (it's used to display a tab bar). So finally i used the >latter method to make it work. Ah yes. There can be only one header-line. >In the includes summary there're lots of include files listed, i'm not >surprised at the amount, but i'm curious that what's the searching flow of >semantic? Will semantic search the symbol in the order as same as the files >are displayed? That's, if you see include summary like this: > >a.cpp >a.hpp >iostream > >And what you need is all in a.hpp, which of the following will semantic >choose? > >1. first search a.cpp, then a.hpp, then stop (since we've found the symbol) >2. traverse all the files listed above, and finally stop. > >I want to know the answer because I found it always takes too much time >before getting the completions, while most of the time the infos for the >completions can be found in the first several files. [ ... ] Due to polymorphism in some languages, it searches all the header files. A second pass over those search results throw out bad hits. For most of the analyzer, however, it collects all the datatypes and names spaces into one big cache. Searching in that cache is pretty fast, but building it can be a bit slow the first time. There is a complex cache-clearing system so only flush the typecache when targeted things change. It might be possible to rig up typecache resets to a key command instead of being automatic. This would speed things up, but you would not get your most recent edits accounted for. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: bread <bre...@gm...> - 2008-12-07 16:55:49
|
Hi, On Mon, Dec 8, 2008 at 12:27 AM, Eric M. Ludlam <er...@si...>wrote: > [...] > Due to polymorphism in some languages, it searches all the header > files. A second pass over those search results throw out bad hits. I recalled that the cache of the header files will not be cleared if they are not touched. But i found that if i do this, for example, // some codes here declare the type of variable foo foo. I had to wait a long time before getting the completions for the first time which could be predicted because there're really many header files. But if i deleted the line above, and re-type "foo.", and get completions again. It will still cost a long time. I'm confused because this file have only several lines, so i don't think re-analyze this file is time consuming. But since other files are not touched at all, they do not need to be re-analyzed, right? > > For most of the analyzer, however, it collects all the datatypes and > names spaces into one big cache. Searching in that cache is pretty > fast, but building it can be a bit slow the first time. There is a > complex cache-clearing system so only flush the typecache when > targeted things change. > > It might be possible to rig up typecache resets to a key command > instead of being automatic. This would speed things up, but you would > not get your most recent edits accounted for. I think this is a good idea since if i can control when to analyzing, i can also use it when i need recent changes to take effects. Would you mind to provide more details about this or share some configurations of yourself? It will be greatly helpful to me because the main problems i encountered now is that it takes too long before the completions show up. I think most of the time 2-3 seconds is a more reasonable period and i'm willing to use some spaces, for example, the cache can be much larger or something else to optimize the efficiency ( I don't know exactly if this can be done i just use this as an example). CEDET is a great tool, but it will be better if faster. :) > Eric > -- Zhiqiu Kong (孔直秋) |
From: Eric M. L. <er...@si...> - 2008-12-08 01:48:42
|
>>> bread <bre...@gm...> seems to think that: >Hi, > >On Mon, Dec 8, 2008 at 12:27 AM, Eric M. Ludlam <er...@si...>wrote: > >> [...] >> Due to polymorphism in some languages, it searches all the header >> files. A second pass over those search results throw out bad hits. > > >I recalled that the cache of the header files will not be cleared if they >are not touched. But i found that if i do this, for example, > >// some codes here declare the type of variable foo >foo. > >I had to wait a long time before getting the completions for the first time >which could be predicted because there're really many header files. But if i >deleted the line above, and re-type "foo.", and get completions again. It >will still cost a long time. I'm confused because this file have only >several lines, so i don't think re-analyze this file is time consuming. But >since other files are not touched at all, they do not need to be >re-analyzed, right? I think that the second time should be fine. There are several caches saved and flushed during editing. The primary is the raw tags list in all the headers. Those should not be cleared. Another is the type cache. The typecache has two levels. The include cache, and the local file cache. If you edit the local file, it should not clear the include cache, which is the slow one to regenerate. Another cache is the scope cache, which is where local context, inheritance, using statements and the like are cached. That gets flushed as you move from function to function. Lastly, the analyzer results are cached, but that gets cleared as you move from statement to statement. If you have a simple motion that cause slowness, go to recreate it, but instead of using normal completion, use the profiler: M-x semantic-elp-analyze RET It will prompt you to save the profiler results in a file which you could email me. Alternately, you can look through the results yourself, and perhaps you will learn something yourself. >> For most of the analyzer, however, it collects all the datatypes and >> names spaces into one big cache. Searching in that cache is pretty >> fast, but building it can be a bit slow the first time. There is a >> complex cache-clearing system so only flush the typecache when >> targeted things change. >> >> It might be possible to rig up typecache resets to a key command >> instead of being automatic. This would speed things up, but you would >> not get your most recent edits accounted for. > >I think this is a good idea since if i can control when to analyzing, i can >also use it when i need recent changes to take effects. Would you mind to >provide more details about this or share some configurations of yourself? It >will be greatly helpful to me because the main problems i encountered now is >that it takes too long before the completions show up. I think most of the >time 2-3 seconds is a more reasonable period and i'm willing to use some >spaces, for example, the cache can be much larger or something else to >optimize the efficiency ( I don't know exactly if this can be done i just >use this as an example). CEDET is a great tool, but it will be better if >faster. :) [ ... ] I'll look into adding such an option, but it may be wise to profile it first to find out who the real culprit is. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: bread <bre...@gm...> - 2008-12-08 04:44:57
|
Hi, On Mon, Dec 8, 2008 at 9:30 AM, Eric M. Ludlam <er...@si...>wrote: > [...] > > If you have a simple motion that cause slowness, go to recreate it, > but instead of using normal completion, use the profiler: > > M-x semantic-elp-analyze RET > > It will prompt you to save the profiler results in a file which you > could email me. Alternately, you can look through the results > yourself, and perhaps you will learn something yourself. I triggered 'M-x semantic-elp-analyze' in several different files, but got the same error msg: mapcar: Symbol's function definition is void: semantic-analyze-inherited-tags But if i use the normal completions, it's fine. > > [...] > > Eric > -- Zhiqiu Kong (孔直秋) |
From: Eric M. L. <er...@si...> - 2008-12-08 12:13:30
|
>>> bread <bre...@gm...> seems to think that: >Hi, > >On Mon, Dec 8, 2008 at 9:30 AM, Eric M. Ludlam <er...@si...>wrote: > >> [...] >> >> If you have a simple motion that cause slowness, go to recreate it, >> but instead of using normal completion, use the profiler: >> >> M-x semantic-elp-analyze RET >> >> It will prompt you to save the profiler results in a file which you >> could email me. Alternately, you can look through the results >> yourself, and perhaps you will learn something yourself. > > >I triggered 'M-x semantic-elp-analyze' in several different files, but got >the same error msg: > >mapcar: Symbol's function definition is void: >semantic-analyze-inherited-tags > >But if i use the normal completions, it's fine. [ ... ] semantic-elp needs to list all the functions it will profile. That one apparently got deleted sometime. I checked in a fix. If you find issues like that in the future, you can just open semantic-elp.el, and remove the offending missing function from the lists of functions being profiled. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: bread <bre...@gm...> - 2008-12-08 14:23:20
|
Hi, 1. semantic-elp-analyze works fine for me now, but i can not use C-c C-s to exit anymore. I checked it and found some files such as init.el can not be saved without error while other files can be saved successfully. Since some files must be saved when Emacs exits, i think semantic-elp-analyze may ruin something about that. I used several addons such as ido and desktopaid, So I toggled debug on error and found these: Debugger entered--Lisp error: (wrong-number-of-arguments #<subr sort> 1) #<subr sort>(chinese-hz) #[(x y) " !\n!V" [func x y] 3](chinese-hz chinese-gbk) #<subr sort>((iso-2022-jp-2) #[(x y) " !\n!V" [func x y] 3]) apply(#<subr sort> ((iso-2022-jp-2) #[(x y) " !\n!V" [func x y] 3])) elp-wrapper(sort nil ((iso-2022-jp-2) #[(x y) " !\n!V" [func x y] 3])) sort((iso-2022-jp-2) #[(x y) " !\n!V" [func x y] 3]) sort-coding-systems((iso-2022-jp-2)) find-coding-systems-region(1 34259) select-safe-coding-system(1 34259 utf-8 nil "/home/bread/.ido.last") write-region(nil nil "/home/bread/.ido.last" nil t "~/.ido.last") basic-save-buffer-2() basic-save-buffer-1() basic-save-buffer() save-buffer() write-file("~/.ido.last" nil) ido-save-history() ido-kill-emacs-hook() run-hooks(kill-emacs-hook) kill-emacs() save-buffers-kill-emacs() save-buffers-kill-terminal(nil) call-interactively(save-buffers-kill-terminal nil nil) It seems that elp-wrapper has something with these errors. 2. After semantic-elp-analyze completes, there's a prompt which asks me to save the file, like this: Save Profile to: ~/semantic.elp But after i click enter, there's an error showed up which told me Debugger entered--Lisp error: (file-error "Opening output file" "permission denied" "/semantic.elp")... It seems that "~/semantic.elp" was changed to "/semantic.elp". It worked fine after i manually changed the path to /home/bread/semanticlog. On Mon, Dec 8, 2008 at 8:13 PM, Eric M. Ludlam <er...@si...>wrote: > >>> bread <bre...@gm...> seems to think that: > >Hi, > > > >On Mon, Dec 8, 2008 at 9:30 AM, Eric M. Ludlam <er...@si... > >wrote: > > > >> [...] > >> > >> If you have a simple motion that cause slowness, go to recreate it, > >> but instead of using normal completion, use the profiler: > >> > >> M-x semantic-elp-analyze RET > >> > >> It will prompt you to save the profiler results in a file which you > >> could email me. Alternately, you can look through the results > >> yourself, and perhaps you will learn something yourself. > > > > > >I triggered 'M-x semantic-elp-analyze' in several different files, but got > >the same error msg: > > > >mapcar: Symbol's function definition is void: > >semantic-analyze-inherited-tags > > > >But if i use the normal completions, it's fine. > [ ... ] > > semantic-elp needs to list all the functions it will profile. That > one apparently got deleted sometime. I checked in a fix. > > If you find issues like that in the future, you can just open > semantic-elp.el, and remove the offending missing function from the > lists of functions being profiled. > > Eric > > -- Zhiqiu Kong (孔直秋) |
From: Eric M. L. <er...@si...> - 2008-12-08 17:16:20
|
>>> bread <bre...@gm...> seems to think that: >Hi, > >1. semantic-elp-analyze works fine for me now, but i can not use C-c C-s to >exit anymore. I checked it and found some files such as init.el can not be >saved without error while other files can be saved successfully. Since some >files must be saved when Emacs exits, i think semantic-elp-analyze may ruin >something about that. > >I used several addons such as ido and desktopaid, So I toggled debug on >error and found these: > >Debugger entered--Lisp error: (wrong-number-of-arguments #<subr sort> 1) > #<subr sort>(chinese-hz) > #[(x y) " !\n!V" [func x y] 3](chinese-hz chinese-gbk) > #<subr sort>((iso-2022-jp-2) #[(x y) " !\n!V" [func x y] 3]) > apply(#<subr sort> ((iso-2022-jp-2) #[(x y) " !\n!V" [func x y] 3])) > elp-wrapper(sort nil ((iso-2022-jp-2) #[(x y) " !\n!V" [func x y] [ ... ] >It seems that elp-wrapper has something with these errors. elp is a tool that comes with Emacs. I have trouble with it too after using it. I should have warned you to exit, as I don't know how to un-elp things once it is enabled. >2. After semantic-elp-analyze completes, there's a prompt which asks me to >save the file, like this: > >Save Profile to: ~/semantic.elp > >But after i click enter, there's an error showed up which told me > >Debugger entered--Lisp error: (file-error "Opening output file" "permission >denied" "/semantic.elp")... > >It seems that "~/semantic.elp" was changed to "/semantic.elp". It worked >fine after i manually changed the path to /home/bread/semanticlog. > [ ... ] Hmm. I'll look into that. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |