Thread: [cedet-semantic] semanticdb : include paths?
Brought to you by:
zappo
From: Dave M. <dav...@gm...> - 2008-02-04 08:06:07
|
Hello, I try such code: --------------------------- class Foo { public: void f() {} }; int main() { Foo foo; foo.f();//<-completion return 0; } --------------------------- when I type foo. semantic give me advise that possible completion is "f", great, but after I move --------------------------- class Foo { public: void f() {} }; --------------------------- to foo.hpp and replace it with #include "foo.hpp", semantic suggest "foo" and "main" as completion "foo.", I add to ".emacs" (setq semanticdb-project-roots (list "path/to/directory/with/foo.hpp")) but this didn't help, any idea, how help semantic to parse foo.hpp? |
From: Eric M. L. <er...@si...> - 2008-02-04 11:49:11
|
Hi, To help debug this, first turn of global-semantic-idle-completions-mode. When trying to get the debug outpt, you can use semantic-analyze-possible-completions. This will error if it doesn't know what to do. Where is foo.hpp? If it is in a different directory like this: /tmp/foo/src/foo.cpp /tmp/foo/include/foo.hpp then you would set the project root like this: (setq semanticdb-project-roots (list "/tmp/foo/foo.hpp")) Next, you can try semanticdb-find-test-translate-path, and make sure that foo.hpp is in the list for the symbol lookup path. but that only works if you have looked at foo.hpp in emacs before. If you are working on a big pre-existing project, and have not opened various C files before, and want emacs to do it for you, you will need a version of EDE from CVS that has a feature I designed for this. If you have CEDET/CVS, the line of code you need would look like this: (ede-cpp-root-project "TEST" :file "/tmp/foo/README" :include-path '( "/include" )) where README is just some file that exists in the root of your project. A filename like "." works too. This way is much more specific and helps restrict the include path to something rationally short, which is important for really big projects. Good Luck Eric >>> "Dave Milter" <dav...@gm...> seems to think that: >Hello, > >I try such code: >--------------------------- >class Foo { >public: > void f() {} >}; > >int main() >{ > Foo foo; > foo.f();//<-completion > > return 0; >} >--------------------------- >when I type foo. semantic give me advise that possible >completion is "f", great, > >but after I move >--------------------------- >class Foo { >public: > void f() {} >}; >--------------------------- >to foo.hpp and replace it with >#include "foo.hpp", >semantic suggest "foo" and "main" as completion "foo.", >I add to ".emacs" >(setq semanticdb-project-roots (list "path/to/directory/with/foo.hpp")) >but this didn't help, >any idea, how help semantic to parse foo.hpp? [ ... ] -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Dave M. <dav...@gm...> - 2008-02-04 18:55:00
|
On 2/4/08, Eric M. Ludlam <er...@si...> wrote: > Hi, > > To help debug this, first turn of global-semantic-idle-completions-mode. > I add (global-semantic-idle-scheduler-mode 1) (global-semantic-idle-completions-mode 1) to ".emacs" right? > When trying to get the debug outpt, you can use > semantic-analyze-possible-completions. This will error if it doesn't > know what to do. > It gives Foo foo int main () > Where is foo.hpp? If it is in a different directory like this: > > /tmp/foo/src/foo.cpp > /tmp/foo/include/foo.hpp > No, $pwd /tmp/foodir $ls foo.cpp foo.hpp One directory, with foo.cpp and foo.hpp. In ".emacs" I have: (setq semanticdb-project-roots (list "/tmp/foodir")) > then you would set the project root like this: > > (setq semanticdb-project-roots (list "/tmp/foo/foo.hpp")) > I try also (setq semanticdb-project-roots (list "/tmp/foodir/foo.hpp")) and the same result: "main" and "foo". > Next, you can try semanticdb-find-test-translate-path, and make sure > that foo.hpp is in the list for the symbol lookup path. > Debugger entered--Lisp error: (wrong-type-argument arrayp nil) eieiomt-next(nil) eieiomt-method-list(semanticdb-needs-refresh-p 0 nil) eieio-generic-call(semanticdb-needs-refresh-p (nil)) semanticdb-needs-refresh-p(nil) semanticdb-file-table-object("foo.hpp" nil) semanticdb-find-table-for-include-default(("foo.hpp" include nil nil #<overlay from 1 to 19 in foo.cpp>) nil) semanticdb-find-table-for-include(("foo.hpp" include nil nil #<overlay from 1 to 19 in foo.cpp>)) semanticdb-find-translate-path-includes-default(nil) semanticdb-find-translate-path-default(nil nil) semanticdb-find-translate-path(nil nil) semanticdb-find-test-translate-path(nil) I opened "foo.hpp" before call it. > but that only works if you have looked at foo.hpp in emacs before. > If you are working on a big pre-existing project, and have not opened > various C files before, and want emacs to do it for you, you will need > a version of EDE from CVS that has a feature I designed for this. > I will try it cedet from CVS, at now if I not say before this was 1.0_pre4 Thanks for reply. |
From: Dave M. <dav...@gm...> - 2008-02-04 19:28:16
|
Hi, On 2/4/08, Eric M. Ludlam <er...@si...> wrote: > If you have CEDET/CVS, the line of code you need would look like > this: > I tried cvs variant, from cedet.cvs.sourceforge.net:/cvsroot/cedet I return things back "include" declaration of "Foo" to foo.cpp: ----------------------- //#include "foo.hpp" class Foo { public: void f() {} }; int main() { Foo foo; foo. return 0; } ----------------------- This variant, works fine with 1.0_pre4, and got: Debugger entered--Lisp error: (wrong-type-argument arrayp nil) eieiomt-next(nil) eieiomt-method-list(semanticdb-cache-get 0 nil) eieio-generic-call(semanticdb-cache-get (nil semantic-scope-cache)) semanticdb-cache-get(nil semantic-scope-cache) semantic-calculate-scope(87) semantic-analyze-current-context-default(87) semantic-analyze-current-context(87) semantic-analyze-possible-completions(87) call-interactively(semantic-analyze-possible-completions) execute-extended-command(nil) call-interactively(execute-extended-command) |
From: Eric M. L. <er...@si...> - 2008-02-04 23:38:38
|
Hi, The only way to get that stacktrace is if semanticdb is somehow turned off, or completely non-functional for some reason. It might be worth using: emacs --debug-init to see if there is a failure loading CEDET during your startup. That may turn up some configuration issue I can help you with. Eric >>> "Dave Milter" <dav...@gm...> seems to think that: >Hi, > >On 2/4/08, Eric M. Ludlam <er...@si...> wrote: >> If you have CEDET/CVS, the line of code you need would look like >> this: >> >I tried cvs variant, from >cedet.cvs.sourceforge.net:/cvsroot/cedet > >I return things back "include" declaration of "Foo" to foo.cpp: >----------------------- > >//#include "foo.hpp" >class Foo { >public: > void f() {} >}; > > >int main() >{ > Foo foo; >foo. > > return 0; >} >----------------------- >This variant, works fine with 1.0_pre4, and got: > > >Debugger entered--Lisp error: (wrong-type-argument arrayp nil) > eieiomt-next(nil) > eieiomt-method-list(semanticdb-cache-get 0 nil) > eieio-generic-call(semanticdb-cache-get (nil semantic-scope-cache)) > semanticdb-cache-get(nil semantic-scope-cache) > semantic-calculate-scope(87) > semantic-analyze-current-context-default(87) > semantic-analyze-current-context(87) > semantic-analyze-possible-completions(87) > call-interactively(semantic-analyze-possible-completions) > execute-extended-command(nil) > call-interactively(execute-extended-command) > |
From: Dave M. <dav...@gm...> - 2008-02-09 16:12:11
Attachments:
debug.out
|
On 2/5/08, Eric M. Ludlam <er...@si...> wrote: > Hi, > > The only way to get that stacktrace is if semanticdb is somehow > turned off, or completely non-functional for some reason. It might be > worth using: > > emacs --debug-init > > to see if there is a failure loading CEDET during your startup. That > may turn up some configuration issue I can help you with. > I attach "message" after start with "emacs --debug-init", I should note, that I apply such patch to build cedet: --- Makefile 29 Jan 2008 14:38:51 -0000 1.15 +++ Makefile 3 Feb 2008 10:58:16 -0000 @@ -34,7 +34,6 @@ speedbar \ eieio \ semantic \ -srecode \ cogre \ contrib because of srecode gave compile error: In toplevel form: srecode-mode.el:27:1:Error: Symbol's function definition is void: srecode-template-mode |
From: Eric M. L. <er...@si...> - 2008-02-09 18:50:15
|
Hi, I remember that compile error now. The autoloads target in the makefile came after the build target for srecode (and srecode-mode.el). I had changed it so the autoloads were first and had checked in that Makefile last week sometime. That ought to get you rolling again. Your debug output is consistent with the build problem. Good Luck. Eric >>> "Dave Milter" <dav...@gm...> seems to think that: >On 2/5/08, Eric M. Ludlam <er...@si...> wrote: >> Hi, >> >> The only way to get that stacktrace is if semanticdb is somehow >> turned off, or completely non-functional for some reason. It might be >> worth using: >> >> emacs --debug-init >> >> to see if there is a failure loading CEDET during your startup. That >> may turn up some configuration issue I can help you with. >> > >I attach "message" after start with "emacs --debug-init", >I should note, that I apply such patch to build cedet: >--- Makefile 29 Jan 2008 14:38:51 -0000 1.15 >+++ Makefile 3 Feb 2008 10:58:16 -0000 >@@ -34,7 +34,6 @@ > speedbar \ > eieio \ > semantic \ >-srecode \ > cogre \ > contrib > >because of srecode gave compile error: >In toplevel form: >srecode-mode.el:27:1:Error: Symbol's function definition is void: >srecode-template-mode > -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Dave M. <dav...@gm...> - 2008-02-09 20:57:58
|
On 2/9/08, Eric M. Ludlam <er...@si...> wrote: > Hi, > > I remember that compile error now. The autoloads target in the > makefile came after the build target for srecode (and > srecode-mode.el). I had changed it so the autoloads were first and > had checked in that Makefile last week sometime. That ought to get > you rolling again. Your debug output is consistent with the build > problem. > So, what it is sollution? I update sources from cvs and still get compile error, I made changes like this, instead of disabling srecode: --- Makefile 29 Jan 2008 14:38:51 -0000 1.15 +++ Makefile 9 Feb 2008 20:20:43 -0000 @@ -56,7 +56,7 @@ DIST_DIR=$(CEDET_HOME)/$(DIST_ROOT) DIST_FILE=$(DIST_DIR).tar.gz -__BUILD_AUTOLOADS=$(patsubst %,%-autoloads,$(CEDET_PACKAGES)) +__BUILD_AUTOLOADS=$(patsubst %,$(CEDET_PACKAGES),%-autoloads) __CLEAN_AUTOLOADS=$(patsubst %,clean-%,$(__BUILD_AUTOLOADS)) __DOMAKE=$(MAKE) $(MFLAGS) EMACS="$(EMACS)" SHELL="$(SHELL)" this help to compile, but cause runtime error: "Cannot open load file: srecode-template-wy" |
From: Eric M. L. <er...@si...> - 2008-02-10 02:41:09
|
Hi, I took a guess that you were using an older emacs. I made a fresh anonymous copy of CVS and did a build with Emacs 21, and was finally able to reproduce your problem. I have checked in changes to speedbar and srecode that enabled me to do a clean rebuild with Emacs 21 from CVS sources. The solution I had mentioned below was already in CVS, but apparently didn't help Emacs 21 at all. Thanks Eric >>> "Dave Milter" <dav...@gm...> seems to think that: >On 2/9/08, Eric M. Ludlam <er...@si...> wrote: >> Hi, >> >> I remember that compile error now. The autoloads target in the >> makefile came after the build target for srecode (and >> srecode-mode.el). I had changed it so the autoloads were first and >> had checked in that Makefile last week sometime. That ought to get >> you rolling again. Your debug output is consistent with the build >> problem. >> > >So, what it is sollution? >I update sources from cvs and still get compile error, >I made changes like this, instead of disabling srecode: >--- Makefile 29 Jan 2008 14:38:51 -0000 1.15 >+++ Makefile 9 Feb 2008 20:20:43 -0000 >@@ -56,7 +56,7 @@ > DIST_DIR=$(CEDET_HOME)/$(DIST_ROOT) > DIST_FILE=$(DIST_DIR).tar.gz > >-__BUILD_AUTOLOADS=$(patsubst %,%-autoloads,$(CEDET_PACKAGES)) >+__BUILD_AUTOLOADS=$(patsubst %,$(CEDET_PACKAGES),%-autoloads) > __CLEAN_AUTOLOADS=$(patsubst %,clean-%,$(__BUILD_AUTOLOADS)) > __DOMAKE=$(MAKE) $(MFLAGS) EMACS="$(EMACS)" SHELL="$(SHELL)" > > >this help to compile, but cause runtime error: >"Cannot open load file: srecode-template-wy" > |
From: Dave M. <dav...@gm...> - 2008-02-10 10:19:32
|
On 2/10/08, Eric M. Ludlam <er...@si...> wrote: > Hi, > > I took a guess that you were using an older emacs. I made a fresh > anonymous copy of CVS and did a build with Emacs 21, and was finally > able to reproduce your problem. > M-x version says: GNU Emacs 22.1.1 (i686-pc-linux-gnu, GTK+ Version 2.12.5) of 2008-02-03 on rain I hope you find solution. It would be greate to see working completition with emacs. |
From: Dave M. <dav...@gm...> - 2008-02-10 11:04:20
Attachments:
debug.out
|
On 2/10/08, Dave Milter <dav...@gm...> wrote: > I hope you find solution. It would be greate to see working > completition with emacs. > Looks like there is some delay synchronization between anonymous cvs and what you use. Now I can build cedet without problems and modification, and don't see any messages about errors in "* Message *" during "emacs init" (see attachment), but when I call (semantic-complete-analyze-inline) after "foo.", I got this :( Debugger entered--Lisp error: (wrong-type-argument arrayp nil) eieiomt-next(nil) eieiomt-method-list(semanticdb-cache-get 0 nil) eieio-generic-call(semanticdb-cache-get (nil semantic-scope-cache)) semanticdb-cache-get(nil semantic-scope-cache) semantic-calculate-scope(87) semantic-analyze-current-context-default(87) semantic-analyze-current-context(87) semantic-complete-analyze-inline() call-interactively(semantic-complete-analyze-inline) |
From: Eric M. L. <er...@si...> - 2008-02-10 12:38:10
|
Hi, You need to finish installing CEDET into your .emacs file. To get completion like that to work, you need a minimum of: (load-file "~/cedet/common/cedet.el") (semantic-load-enable-minimum-features) Please see the "Code Completion" chapter of cedet/common/cedet.info for more on this topic. Good Luck Eric >>> "Dave Milter" <dav...@gm...> seems to think that: >On 2/10/08, Dave Milter <dav...@gm...> wrote: >> I hope you find solution. It would be greate to see working >> completition with emacs. >> > >Looks like there is some delay synchronization between anonymous cvs >and what you use. Now I can build cedet without problems and >modification, >and don't see any messages about errors in "* Message *" during "emacs init" >(see attachment), but when I call (semantic-complete-analyze-inline) >after "foo.", >I got this :( > >Debugger entered--Lisp error: (wrong-type-argument arrayp nil) > eieiomt-next(nil) > eieiomt-method-list(semanticdb-cache-get 0 nil) > eieio-generic-call(semanticdb-cache-get (nil semantic-scope-cache)) > semanticdb-cache-get(nil semantic-scope-cache) > semantic-calculate-scope(87) > semantic-analyze-current-context-default(87) > semantic-analyze-current-context(87) > semantic-complete-analyze-inline() > call-interactively(semantic-complete-analyze-inline) > -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |
From: Dave M. <dav...@gm...> - 2008-02-10 15:34:10
|
Hi, On 2/10/08, Eric M. Ludlam <er...@si...> wrote: > You need to finish installing CEDET into your .emacs file. To get > completion like that to work, you need a minimum of: > > (load-file "~/cedet/common/cedet.el") > (semantic-load-enable-minimum-features) > Thanks, actually this stuff should be done by my system: I have (load "/usr/share/emacs/site-lisp/site-gentoo") which call /usr/share/emacs/site-lisp/site-gentoo.d/60cedet-gentoo.el which has line like: (load "/usr/share/emacs/site-lisp/cedet/common/cedet" nil t) the problem was in (semantic-load-enable-minimum-features) emacs init system doesn't call it, there is lines like: (setq semantic-load-turn-everything-on t) (setq semantic-load-turn-useful-things-on t) but looks like them do not help with "cvs version", but works with previous version: 1.0_pre4 |
From: Eric M. L. <er...@si...> - 2008-02-10 16:14:36
|
>>> "Dave Milter" <dav...@gm...> seems to think that: >Hi, > >On 2/10/08, Eric M. Ludlam <er...@si...> wrote: >> You need to finish installing CEDET into your .emacs file. To get >> completion like that to work, you need a minimum of: >> >> (load-file "~/cedet/common/cedet.el") >> (semantic-load-enable-minimum-features) >> > >Thanks, actually this stuff should be done by my system: >I have (load "/usr/share/emacs/site-lisp/site-gentoo") >which call >/usr/share/emacs/site-lisp/site-gentoo.d/60cedet-gentoo.el >which has line like: >(load "/usr/share/emacs/site-lisp/cedet/common/cedet" nil t) > >the problem was in >(semantic-load-enable-minimum-features) >emacs init system doesn't call it, > >there is lines like: >(setq semantic-load-turn-everything-on t) >(setq semantic-load-turn-useful-things-on t) > >but looks like them do not help with "cvs version", >but works with previous version: 1.0_pre4 > Those variables do still work, but you need to have them defined BEFORE loading cedet.el. I'm not sure why they would have worked before, but not now. I'm glad you got the system working now. Eric -- Eric Ludlam: er...@si... Siege: www.siege-engine.com Emacs: http://cedet.sourceforge.net |