Thread: [CEDET-devel] rename 'define-overload' to 'defoverload'?
Brought to you by:
zappo
From: <ry...@ds...> - 2002-12-29 03:55:16
|
Hi Eric and David, I'm trying to spend time on semantic over the holidays. May I suggest using the term 'defoverload' rather than 'define-overload'? The problem with 'define-overload' is that it has a '-' character which breaks emacs' built-in tools such as find-function-noselect. Let me illustrate what I mean by an example. Type `C-h f semantic-lex RET'. This shows the *Help* buffer. Now click on the "semantic-lex" link in the *Help* buffer. You get "Cannot find definition of `semantic-lex' in library `semantic-lex' error message which gets in the way of one trying to hack semantic code. If we used 'defoverload' instead of 'define-overload', then clicking on the same link takes one to the correct line within semantic-lex.el file. 'find-function-noselect' is a built-in emacs function. Other elisp code has difficulty with 'define-overload'. For example Noah Friedman's fff-elisp.el package provides find-function-noselect like features. In that package, I find (defvar fff-emacs-lisp-def-regexp "^\\s-*(\\bdef\\w+\\s-+'?\\(%s\\)\\(\\s-\\|$\\)" "The regexp used to find symbol definitions in an emacs lisp source file. This regexp must contain a `%s' where the symbol name is to be inserted in the template. If \\\(\\\) registers are included in the regular expression so that \\1 matches, point will be positioned at that match instead of \\0.") It seems like built-ins, functions, and macros that define other functions have historically had names such as defXXX where XXX seems to match certain regexp's that do not seem to include '-' stuck in the middle. You know most of them, e.g,. defun, defalias, defsubst, defmacro, defvar, defcustom, etc. I can't remember whether this time-honored naming tradition is actually documented somewhere. Clearly this naming tradition has affected existing elisp code. The fact that a simple renmaing of one macro removes a hurdle seems to be reason enough to abide by this naming tradition. |
From: David P. <dav...@wa...> - 2002-12-29 11:25:44
|
Hi Richard, > I'm trying to spend time on semantic over the holidays. Great! > May I suggest using the term 'defoverload' rather than > 'define-overload'? The problem with 'define-overload' is that it has > a '-' character which breaks emacs' built-in tools such as > find-function-noselect. Let me illustrate what I mean by an example. > > Type `C-h f semantic-lex RET'. > This shows the *Help* buffer. > Now click on the "semantic-lex" link in the *Help* buffer. > You get > > "Cannot find definition of `semantic-lex' in library `semantic-lex' > > error message which gets in the way of one trying to hack semantic > code. If we used 'defoverload' instead of 'define-overload', then > clicking on the same link takes one to the correct line within > semantic-lex.el file. I noticed that quite annoying problem too :-( [...] > It seems like built-ins, functions, and macros that define other > functions have historically had names such as defXXX where XXX seems > to match certain regexp's that do not seem to include '-' stuck in the > middle. You know most of them, e.g,. defun, defalias, defsubst, > defmacro, defvar, defcustom, etc. Your suggestion seems reasonable. A quick grep over Semantic sources gave me the following `defSOMETHING' macros: ./semantic-fw.el:477:(defmacro defvar-mode-local ./semantic-fw.el:486:(defmacro defconst-mode-local ./semantic-fw.el:523:(defmacro define-overload ./semantic-fw.el:557:(defmacro define-mode-overload-implementation ./semantic-lex.el:461:(defmacro define-lex ./semantic-lex.el:587:(defmacro define-lex-analyzer ./semantic-lex.el:616:(defmacro define-lex-regex-analyzer ./semantic-lex.el:625:(defmacro define-lex-simple-regex-analyzer ./semantic-lex.el:647:(defmacro define-lex-block-analyzer ./wisent/wisent-bovine.el:99:(defmacro define-wisent-lexer So all the above `define-THING' should be renamed to `defTHING' too. That is for example `define-lex-block-analyzer' should be renamed to `deflexblockanalyzer' (what an ugly name!) because `find-function-noselect' don't work with `-' embedded in name :-( In fact, it seems that this is the function `find-function-search-for-symbol' that actually search for a symbol definition in a library (GNU Emacs 20.7, 21 and XEmacs 21.4). It uses the `find-function-regexp' and `find-variable-regexp' to respectively search for a function or variable definition. Maybe we could just customize these regexps to match Semantic `define-THING' macros? What do you think? David |
From: Eric M. L. <er...@si...> - 2002-12-29 13:26:34
|
>>> David Ponce <dav...@wa...> seems to think that: >Hi Richard, > > > I'm trying to spend time on semantic over the holidays. > >Great! > > > May I suggest using the term 'defoverload' rather than > > 'define-overload'? The problem with 'define-overload' is that it has > > a '-' character which breaks emacs' built-in tools such as > > find-function-noselect. Let me illustrate what I mean by an example. > > > > Type `C-h f semantic-lex RET'. > > This shows the *Help* buffer. > > Now click on the "semantic-lex" link in the *Help* buffer. > > You get > > > > "Cannot find definition of `semantic-lex' in library `semantic-lex' > > > > error message which gets in the way of one trying to hack semantic > > code. If we used 'defoverload' instead of 'define-overload', then > > clicking on the same link takes one to the correct line within > > semantic-lex.el file. > >I noticed that quite annoying problem too :-( > >[...] > > It seems like built-ins, functions, and macros that define other > > functions have historically had names such as defXXX where XXX seems > > to match certain regexp's that do not seem to include '-' stuck in the > > middle. You know most of them, e.g,. defun, defalias, defsubst, > > defmacro, defvar, defcustom, etc. > >Your suggestion seems reasonable. A quick grep over Semantic sources >gave me the following `defSOMETHING' macros: > >./semantic-fw.el:477:(defmacro defvar-mode-local >./semantic-fw.el:486:(defmacro defconst-mode-local >./semantic-fw.el:523:(defmacro define-overload >./semantic-fw.el:557:(defmacro define-mode-overload-implementation >./semantic-lex.el:461:(defmacro define-lex >./semantic-lex.el:587:(defmacro define-lex-analyzer >./semantic-lex.el:616:(defmacro define-lex-regex-analyzer >./semantic-lex.el:625:(defmacro define-lex-simple-regex-analyzer >./semantic-lex.el:647:(defmacro define-lex-block-analyzer >./wisent/wisent-bovine.el:99:(defmacro define-wisent-lexer > >So all the above `define-THING' should be renamed to `defTHING' >too. That is for example `define-lex-block-analyzer' should be >renamed to `deflexblockanalyzer' (what an ugly name!) because >`find-function-noselect' don't work with `-' embedded in name :-( [ ... ] I'm not sure if I'd change any of the `lex' macros. They are not functions or variables. (Well, they are variables, but they act like functions.) Emacs needs a `find-thingy' function that doesn't much care about function or variable for situations like this. 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: David P. <dav...@wa...> - 2002-12-29 12:05:16
|
> In fact, it seems that this is the function > `find-function-search-for-symbol' that actually search for a symbol > definition in a library (GNU Emacs 20.7, 21 and XEmacs 21.4). It uses > the `find-function-regexp' and `find-variable-regexp' to respectively > search for a function or variable definition. Maybe we could just > customize these regexps to match Semantic `define-THING' macros? I just found that I wrote the following `defadvice' to extend `find-function-search-for-symbol' for CEDET things: (defadvice find-function-search-for-symbol (around cedet-find-function-search-for-symbol activate) "Extend find function to search for CEDET stuff." (if (ad-get-arg 1) ;; Search for a variable ad-do-it ;; Search for a function (condition-case nil ad-do-it (error ;; The default search failed try a more specific regexp. (let ((find-function-regexp (format "(%s%s\\('\\|(quote \\)?%%s\\(\\s-\\|$\\|(\\|)\\)" (regexp-opt '( "defclass" "defgeneric" "define-lex" "define-lex-analyzer" "define-lex-block-analyzer" "define-lex-regex-analyzer" "define-lex-simple-regex-analyzer" "define-mode-overload-implementation" "define-overload" "define-wisent-lexer" "defmethod" )) find-function-space-re))) ad-do-it))))) Maybe could we provide something like this in common tools? David |
From: <ry...@ds...> - 2002-12-29 20:29:41
|
Hi David, Your defadvice seems like it would solve the original problem I was referring to. I would like to see in somewhere in cedet files. In addition, I took a look at find-function-regexp that you mentioned and added the following to my .emacs: ;; Modified this regexp from the original so that all symbols starting ;; with "define-" would be matched. This allows define-overload from ;; semantic package to match in particular. -ryk12/29/02. (custom-set-variables '(find-function-regexp "^\\s-*(\\(def\[^cgv\W]\\w+\\*?\ \\|define-\\(\\(\\sw\\|\\s_\\)+\\)\ \\|easy-mmode-define-global-mode\\)\ \\(\\s-\\|\n\\)+'?%s\\(\\s-\\|$\\|\(\\|\)\\)" )) I believe the only change I made to the regexp was to match anything that starts with "define-" prefix. I will suggest this change to the author of find-func. Also this perhaps should be a convention promoted by the elisp manual itself so that all elisp packages would benefit from it. Above change certainly wouldn't help with defclass or defgeneric. >>>>> "DP" == David Ponce <dav...@wa...> writes: DP> >> In fact, it seems that this is the function >> `find-function-search-for-symbol' that actually search for a symbol >> definition in a library (GNU Emacs 20.7, 21 and XEmacs 21.4). It uses >> the `find-function-regexp' and `find-variable-regexp' to respectively >> search for a function or variable definition. Maybe we could just >> customize these regexps to match Semantic `define-THING' macros? DP> DP> I just found that I wrote the following `defadvice' to extend DP> `find-function-search-for-symbol' for CEDET things: DP> DP> (defadvice find-function-search-for-symbol DP> (around cedet-find-function-search-for-symbol activate) DP> "Extend find function to search for CEDET stuff." DP> (if (ad-get-arg 1) DP> ;; Search for a variable DP> ad-do-it DP> ;; Search for a function DP> (condition-case nil DP> ad-do-it DP> (error DP> ;; The default search failed try a more specific regexp. DP> (let ((find-function-regexp DP> (format "(%s%s\\('\\|(quote \\)?%%s\\(\\s-\\|$\\|(\\|)\\)" DP> (regexp-opt DP> '( DP> "defclass" DP> "defgeneric" DP> "define-lex" DP> "define-lex-analyzer" DP> "define-lex-block-analyzer" DP> "define-lex-regex-analyzer" DP> "define-lex-simple-regex-analyzer" DP> "define-mode-overload-implementation" DP> "define-overload" DP> "define-wisent-lexer" DP> "defmethod" DP> )) DP> find-function-space-re))) DP> ad-do-it))))) DP> DP> Maybe could we provide something like this in common tools? DP> DP> David DP> DP> DP> DP> DP> ------------------------------------------------------- DP> This sf.net email is sponsored by:ThinkGeek DP> Welcome to geek heaven. DP> http://thinkgeek.com/sf DP> _______________________________________________ DP> Cedet-devel mailing list DP> Ced...@li... DP> https://lists.sourceforge.net/lists/listinfo/cedet-devel DP> |
From: Eric M. L. <er...@si...> - 2002-12-29 13:24:24
|
Hi, I think that symbol started out as `semantic-defoverload', which eventually becamse define-overload. It was matching define-lex and other features. One of the reasons I liked `define-overload' over `defoverload' is that it made it clear by the name that is was not a blessed Emacs API like defun. I do agree with the problem you proclaim, however. It is a pain. One reason I never worried about it is because even if it could find a `defSOMETHING', it would always go back to the original definition, when what you are probably interested in is the implementation. This would require some clever advice for the find-function routing. Fortunately, the default implementation is usually specified next to the overload function itself. Perhaps senator should offer a `find-function' that works across all languages, and Emacs Lisp could override some implementation do do the right thing when defining an override. Oh my. One thing I would like to see is an augmentation of help mode to list out all functions that may overload a given semantic function. (eieio adds a temp-buffer-show-hook for doing this with methods.) Ok, enough sillyness. If everyone agrees, I don't mind `defoverload'. I'd be a little more concerned about changing `define-mode-overload-implementation' though. Removing -s would make that hard to read. ;) Eric >>> ry...@ds... seems to think that: >Hi Eric and David, > >I'm trying to spend time on semantic over the holidays. > >May I suggest using the term 'defoverload' rather than >'define-overload'? The problem with 'define-overload' is that it has >a '-' character which breaks emacs' built-in tools such as >find-function-noselect. Let me illustrate what I mean by an example. > >Type `C-h f semantic-lex RET'. >This shows the *Help* buffer. >Now click on the "semantic-lex" link in the *Help* buffer. >You get > > "Cannot find definition of `semantic-lex' in library `semantic-lex' > >error message which gets in the way of one trying to hack semantic >code. If we used 'defoverload' instead of 'define-overload', then >clicking on the same link takes one to the correct line within >semantic-lex.el file. > >'find-function-noselect' is a built-in emacs function. >Other elisp code has difficulty with 'define-overload'. >For example Noah Friedman's fff-elisp.el package provides >find-function-noselect like features. In that package, I find > >(defvar fff-emacs-lisp-def-regexp > "^\\s-*(\\bdef\\w+\\s-+'?\\(%s\\)\\(\\s-\\|$\\)" > "The regexp used to find symbol definitions in an emacs lisp source file. >This regexp must contain a `%s' where the symbol name is to be inserted in >the template. >If \\\(\\\) registers are included in the regular expression so that \\1 >matches, point will be positioned at that match instead of \\0.") > >It seems like built-ins, functions, and macros that define other >functions have historically had names such as defXXX where XXX seems >to match certain regexp's that do not seem to include '-' stuck in the >middle. You know most of them, e.g,. defun, defalias, defsubst, >defmacro, defvar, defcustom, etc. > >I can't remember whether this time-honored naming tradition is >actually documented somewhere. Clearly this naming tradition has >affected existing elisp code. The fact that a simple renmaing of one >macro removes a hurdle seems to be reason enough to abide by this >naming tradition. [ ... ] -- 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 |