diff options
author | Eric M. Ludlam <zappo@gnu.org> | 2010-09-21 18:11:23 -0400 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2010-09-21 18:11:23 -0400 |
commit | b9749554532876da8bc15e10bc3fb8bd8c0f32ea (patch) | |
tree | 0d00b9800e8eb95e8466ab322fde1879e378fddb /lisp/cedet/srecode/find.el | |
parent | fbb3da770f233a8e0cf99d5f053b0c31cbbc8db4 (diff) | |
download | emacs-b9749554532876da8bc15e10bc3fb8bd8c0f32ea.tar.gz emacs-b9749554532876da8bc15e10bc3fb8bd8c0f32ea.tar.bz2 emacs-b9749554532876da8bc15e10bc3fb8bd8c0f32ea.zip |
Synch SRecode to CEDET 1.0.
* lisp/cedet/cedet.el (cedet-version):
* lisp/cedet/srecode.el (srecode-version): Bump version to 1.0.
* lisp/cedet/pulse.el (pulse-momentary-highlight-overlay): If pulse-flag is
'never, disable all pulsing.
* lisp/cedet/srecode/compile.el (srecode-compile-templates): Fix directory
compare of built-in templates. Give built-ins lower piority.
Support special variable "project".
(srecode-compile-template-table): Set :project slot of new tables.
(srecode-compile-one-template-tag): Use
srecode-create-dictionaries-from-tags.
* lisp/cedet/srecode/cpp.el (srecode-cpp): New defgroup.
(srecode-cpp-namespaces): New option.
(srecode-semantic-handle-:using-namespaces)
(srecode-cpp-apply-templates): New functions.
(srecode-semantic-apply-tag-to-dict): Handle template parameters
by calling `srecode-cpp-apply-templates'.
* lisp/cedet/srecode/dictionary.el (srecode-dictionary-add-template-table):
Do not add variables in tables not for the current project.
(srecode-compound-toString): Handle cases where the default value
is another compound value.
(srecode-dictionary-lookup-name): New optional argument
NON-RECURSIVE, which inhibits visiting dictionary parents.
(srecode-dictionary-add-section-dictionary)
(srecode-dictionary-merge): New optional argument FORCE adds
values even if an identically named entry exists.
(srecode-dictionary-add-entries): New method.
(srecode-create-dictionaries-from-tags): New function.
* lisp/cedet/srecode/fields.el (srecode-fields-exit-confirmation): New option.
(srecode-field-exit-ask): Use it.
* lisp/cedet/srecode/find.el (srecode-template-get-table)
(srecode-template-get-table-for-binding)
(srecode-all-template-hash): Skip if not in current project.
(srecode-template-table-in-project-p): New method.
* lisp/cedet/srecode/getset.el (srecode-insert-getset): Force tag table
update. Don't query the class if it is empty.
* lisp/cedet/srecode/insert.el (srecode-insert-fcn): Merge template
dictionary before resolving arguments.
(srecode-insert-method-helper): Add error checking to make sure
that we only have dictionaries.
(srecode-insert-method): Check template nesting depth when using
point inserter override.
(srecode-insert-method): Install override with depth limit.
* lisp/cedet/srecode/map.el (srecode-map-update-map): Make map loading more
robust.
* lisp/cedet/srecode/mode.el (srecode-bind-insert): Call
srecode-load-tables-for-mode.
(srecode-minor-mode-templates-menu): Do not list templates that
are not in the current project.
(srecode-menu-bar): Add binding for srecode-macro-help.
* lisp/cedet/srecode/table.el (srecode-template-table): Add :project slot.
(srecode-dump): Dump it.
* lisp/cedet/srecode/texi.el (srecode-texi-insert-tag-as-doc): New function.
(semantic-insert-foreign-tag): Use it.
Diffstat (limited to 'lisp/cedet/srecode/find.el')
-rw-r--r-- | lisp/cedet/srecode/find.el | 88 |
1 files changed, 54 insertions, 34 deletions
diff --git a/lisp/cedet/srecode/find.el b/lisp/cedet/srecode/find.el index 1a3057fda0e..9c5a897fc4f 100644 --- a/lisp/cedet/srecode/find.el +++ b/lisp/cedet/srecode/find.el @@ -92,6 +92,23 @@ all template files for that application will be loaded." )) )) +;;; PROJECT +;; +;; Find if a template table has a project set, and if so, is the +;; current buffer in that project. +(defmethod srecode-template-table-in-project-p ((tab srecode-template-table)) + "Return non-nil if the table TAB can be used in the current project. +If TAB has a :project set, check that the directories match. +If TAB is nil, then always return t." + (let ((proj (oref tab :project))) + ;; Return t if the project wasn't set. + (if (not proj) t + ;; If the project directory was set, lets check it. + (let ((dd (expand-file-name default-directory)) + (projexp (regexp-quote (directory-file-name proj)))) + (if (string-match (concat "^" projexp) dd) + t nil))))) + ;;; SEARCH ;; ;; Find a given template based on name, and features of the current @@ -103,13 +120,14 @@ all template files for that application will be loaded." Optional argument CONTEXT specifies that the template should part of a particular context. The APPLICATION argument is unused." - (if context - ;; If a context is specified, then look it up there. - (let ((ctxth (gethash context (oref tab contexthash)))) - (when ctxth - (gethash template-name ctxth))) - ;; No context, perhaps a merged name? - (gethash template-name (oref tab namehash)))) + (when (srecode-template-table-in-project-p tab) + (if context + ;; If a context is specified, then look it up there. + (let ((ctxth (gethash context (oref tab contexthash)))) + (when ctxth + (gethash template-name ctxth))) + ;; No context, perhaps a merged name? + (gethash template-name (oref tab namehash))))) (defmethod srecode-template-get-table ((tab srecode-mode-table) template-name &optional @@ -144,32 +162,33 @@ tables that do not belong to an application will be searched." "Find in the template name in table TAB, the template with BINDING. Optional argument CONTEXT specifies that the template should part of a particular context." - (let* ((keyout nil) - (hashfcn (lambda (key value) - (when (and (slot-boundp value 'binding) - (oref value binding) - (= (aref (oref value binding) 0) binding)) - (setq keyout key)))) - (contextstr (cond ((listp context) - (car-safe context)) - ((stringp context) - context) - (t nil))) - ) - (if context - (let ((ctxth (gethash contextstr (oref tab contexthash)))) - (when ctxth - ;; If a context is specified, then look it up there. - (maphash hashfcn ctxth) - ;; Context hashes EXCLUDE the context prefix which - ;; we need to include, so concat it here - (when keyout - (setq keyout (concat contextstr ":" keyout))) - ))) - (when (not keyout) - ;; No context, or binding in context. Try full hash. - (maphash hashfcn (oref tab namehash))) - keyout)) + (when (srecode-template-table-in-project-p tab) + (let* ((keyout nil) + (hashfcn (lambda (key value) + (when (and (slot-boundp value 'binding) + (oref value binding) + (= (aref (oref value binding) 0) binding)) + (setq keyout key)))) + (contextstr (cond ((listp context) + (car-safe context)) + ((stringp context) + context) + (t nil))) + ) + (if context + (let ((ctxth (gethash contextstr (oref tab contexthash)))) + (when ctxth + ;; If a context is specified, then look it up there. + (maphash hashfcn ctxth) + ;; Context hashes EXCLUDE the context prefix which + ;; we need to include, so concat it here + (when keyout + (setq keyout (concat contextstr ":" keyout))) + ))) + (when (not keyout) + ;; No context, or binding in context. Try full hash. + (maphash hashfcn (oref tab namehash))) + keyout))) (defmethod srecode-template-get-table-for-binding ((tab srecode-mode-table) binding &optional context application) @@ -220,7 +239,8 @@ Optional argument HASH is the hash table to fill in." ) (while tabs ;; Exclude templates for a perticular application. - (when (not (oref (car tabs) :application)) + (when (and (not (oref (car tabs) :application)) + (srecode-template-table-in-project-p (car tabs))) (maphash (lambda (key temp) (puthash key temp mhash) ) |