2009-09-03 03:58:13 +00:00
|
|
|
|
;;; semantic/util.el --- Utilities for use with semantic tag tables
|
2009-08-28 15:21:26 +00:00
|
|
|
|
|
|
|
|
|
;;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007,
|
2010-01-13 00:35:10 -08:00
|
|
|
|
;;; 2008, 2009, 2010 Free Software Foundation, Inc.
|
2009-08-28 15:21:26 +00:00
|
|
|
|
|
|
|
|
|
;; Author: Eric M. Ludlam <zappo@gnu.org>
|
|
|
|
|
;; Keywords: syntax
|
|
|
|
|
|
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
|
|
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
|
|
|
|
;; it under the terms of the GNU General Public License as published by
|
|
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
;; (at your option) any later version.
|
|
|
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
|
|
|
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
;;
|
|
|
|
|
;; Semantic utility API for use with semantic tag tables.
|
|
|
|
|
;;
|
|
|
|
|
|
|
|
|
|
(require 'semantic)
|
2009-09-05 01:00:36 +00:00
|
|
|
|
|
2009-09-28 15:15:00 +00:00
|
|
|
|
(eval-when-compile
|
|
|
|
|
(require 'semantic/db-find)
|
|
|
|
|
;; For semantic-find-tags-by-class, semantic--find-tags-by-function,
|
|
|
|
|
;; and semantic-brute-find-tag-standard:
|
|
|
|
|
(require 'semantic/find))
|
|
|
|
|
|
2009-09-05 01:00:36 +00:00
|
|
|
|
(declare-function data-debug-insert-stuff-list "data-debug")
|
|
|
|
|
(declare-function data-debug-insert-thing "data-debug")
|
2009-09-28 15:15:00 +00:00
|
|
|
|
(declare-function semantic-ctxt-current-symbol-and-bounds "semantic/ctxt")
|
2009-08-28 15:21:26 +00:00
|
|
|
|
|
|
|
|
|
;;; Code:
|
|
|
|
|
|
|
|
|
|
(defvar semantic-type-relation-separator-character '(".")
|
|
|
|
|
"Character strings used to separate a parent/child relationship.
|
|
|
|
|
This list of strings are used for displaying or finding separators
|
|
|
|
|
in variable field dereferencing. The first character will be used for
|
|
|
|
|
display. In C, a type field is separated like this: \"type.field\"
|
|
|
|
|
thus, the character is a \".\". In C, and additional value of \"->\"
|
|
|
|
|
would be in the list, so that \"type->field\" could be found.")
|
|
|
|
|
(make-variable-buffer-local 'semantic-type-relation-separator-character)
|
|
|
|
|
|
|
|
|
|
(defvar semantic-equivalent-major-modes nil
|
|
|
|
|
"List of major modes which are considered equivalent.
|
|
|
|
|
Equivalent modes share a parser, and a set of override methods.
|
|
|
|
|
A value of nil means that the current major mode is the only one.")
|
|
|
|
|
(make-variable-buffer-local 'semantic-equivalent-major-modes)
|
|
|
|
|
|
|
|
|
|
;; These semanticdb calls will throw warnings in the byte compiler.
|
|
|
|
|
;; Doing the right thing to make them available at compile time
|
|
|
|
|
;; really messes up the compilation sequence.
|
|
|
|
|
(defun semantic-file-tag-table (file)
|
|
|
|
|
"Return a tag table for FILE.
|
|
|
|
|
If it is loaded, return the stream after making sure it's ok.
|
|
|
|
|
If FILE is not loaded, check to see if `semanticdb' feature exists,
|
|
|
|
|
and use it to get tags from files not in memory.
|
|
|
|
|
If FILE is not loaded, and semanticdb is not available, find the file
|
|
|
|
|
and parse it."
|
2009-09-19 17:25:30 +00:00
|
|
|
|
(save-match-data
|
|
|
|
|
(if (find-buffer-visiting file)
|
* cedet/srecode/srt-mode.el (semantic-analyze-possible-completions):
* cedet/semantic/symref/list.el (semantic-symref-rb-toggle-expand-tag):
* cedet/semantic/symref/grep.el (semantic-symref-perform-search):
* cedet/semantic/bovine/gcc.el (semantic-gcc-query):
* cedet/semantic/bovine/c.el (semantic-c-parse-lexical-token):
* cedet/semantic/analyze/debug.el (semantic-analyzer-debug-add-buttons)
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype)
(semantic-analyzer-debug-insert-include-summary):
* cedet/semantic/util.el (semantic-file-tag-table):
(semantic-describe-buffer-var-helper, semantic-something-to-tag-table)
(semantic-recursive-find-nonterminal-by-name):
* cedet/semantic/tag-ls.el (semantic-tag-calculate-parent-default):
* cedet/semantic/tag-file.el (semantic-prototype-file):
* cedet/semantic/symref.el (semantic-symref-parse-tool-output):
* cedet/semantic/sb.el (semantic-sb-fetch-tag-table):
* cedet/semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
* cedet/semantic/idle.el (semantic-idle-work-for-one-buffer):
(semantic-idle-summary-maybe-highlight):
* cedet/semantic/ia-sb.el (semantic-ia-speedbar)
(semantic-ia-sb-tag-info):
* cedet/semantic/grammar.el (semantic-analyze-possible-completions):
* cedet/semantic/find.el (semantic-brute-find-tag-by-position):
* cedet/semantic/ede-grammar.el (project-compile-target):
(ede-proj-makefile-insert-variables):
* cedet/semantic/debug.el (semantic-debug-set-parser-location):
(semantic-debug-set-source-location, semantic-debug-interface-layout)
(semantic-debug-mode, semantic-debug):
* cedet/semantic/db.el (semanticdb-needs-refresh-p):
* cedet/semantic/db-typecache.el (semanticdb-typecache-refresh-for-buffer):
* cedet/semantic/db-javascript.el (semanticdb-equivalent-mode):
* cedet/semantic/db-find.el (semanticdb-find-log-new-search)
(semanticdb-find-translate-path-includes--internal)
(semanticdb-reset-log, semanticdb-find-log-activity):
* cedet/semantic/db-file.el (object-write):
* cedet/semantic/db-el.el (semanticdb-equivalent-mode):
* cedet/semantic/db-ebrowse.el (semanticdb-ebrowse-C-file-p)
(semanticdb-create-ebrowse-database):
* cedet/semantic/db-debug.el (semanticdb-table-sanity-check):
* cedet/semantic/complete.el (semantic-displayor-focus-request)
(semantic-collector-calculate-completions-raw)
(semantic-complete-read-tag-analyzer):
* cedet/semantic/analyze.el (semantic-analyze-pulse):
* cedet/ede/util.el (ede-update-version-in-source):
* cedet/ede/proj.el (project-delete-target):
* cedet/ede/proj-elisp.el (ede-update-version-in-source)
(ede-proj-flush-autoconf):
* cedet/ede/pconf.el (ede-proj-configure-synchronize)
(ede-proj-configure-synchronize):
* cedet/ede/locate.el (ede-locate-file-in-project-impl):
* cedet/ede/linux.el (ede-linux-version):
* cedet/ede/emacs.el (ede-emacs-version):
* cedet/ede/dired.el (ede-dired-add-to-target):
* cedet/ede.el (ede-buffer-header-file, ede-find-target)
(ede-buffer-documentation-files, ede-project-buffers, ede-set)
(ede-target-buffers, ede-buffers, ede-make-project-local-variable):
* cedet/cedet-idutils.el (cedet-idutils-fnid-call):
(cedet-idutils-lid-call, cedet-idutils-expand-filename)
(cedet-idutils-version-check):
* cedet/cedet-global.el (cedet-gnu-global-call):
(cedet-gnu-global-expand-filename, cedet-gnu-global-root)
(cedet-gnu-global-version-check, cedet-gnu-global-scan-hits):
* cedet/cedet-cscope.el (cedet-cscope-call)
(cedet-cscope-expand-filename, cedet-cscope-version-check):
Use with-current-buffer.
* cedet/ede.el (ede-make-project-local-variable)
(ede-set-project-variables, ede-set): Use dolist.
2009-10-30 02:16:41 +00:00
|
|
|
|
(with-current-buffer (find-buffer-visiting file)
|
2009-09-19 17:25:30 +00:00
|
|
|
|
(semantic-fetch-tags))
|
|
|
|
|
;; File not loaded
|
|
|
|
|
(if (and (require 'semantic/db-mode)
|
|
|
|
|
(semanticdb-minor-mode-p))
|
|
|
|
|
;; semanticdb is around, use it.
|
|
|
|
|
(semanticdb-file-stream file)
|
|
|
|
|
;; Get the stream ourselves.
|
* cedet/srecode/srt-mode.el (semantic-analyze-possible-completions):
* cedet/semantic/symref/list.el (semantic-symref-rb-toggle-expand-tag):
* cedet/semantic/symref/grep.el (semantic-symref-perform-search):
* cedet/semantic/bovine/gcc.el (semantic-gcc-query):
* cedet/semantic/bovine/c.el (semantic-c-parse-lexical-token):
* cedet/semantic/analyze/debug.el (semantic-analyzer-debug-add-buttons)
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype)
(semantic-analyzer-debug-insert-include-summary):
* cedet/semantic/util.el (semantic-file-tag-table):
(semantic-describe-buffer-var-helper, semantic-something-to-tag-table)
(semantic-recursive-find-nonterminal-by-name):
* cedet/semantic/tag-ls.el (semantic-tag-calculate-parent-default):
* cedet/semantic/tag-file.el (semantic-prototype-file):
* cedet/semantic/symref.el (semantic-symref-parse-tool-output):
* cedet/semantic/sb.el (semantic-sb-fetch-tag-table):
* cedet/semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
* cedet/semantic/idle.el (semantic-idle-work-for-one-buffer):
(semantic-idle-summary-maybe-highlight):
* cedet/semantic/ia-sb.el (semantic-ia-speedbar)
(semantic-ia-sb-tag-info):
* cedet/semantic/grammar.el (semantic-analyze-possible-completions):
* cedet/semantic/find.el (semantic-brute-find-tag-by-position):
* cedet/semantic/ede-grammar.el (project-compile-target):
(ede-proj-makefile-insert-variables):
* cedet/semantic/debug.el (semantic-debug-set-parser-location):
(semantic-debug-set-source-location, semantic-debug-interface-layout)
(semantic-debug-mode, semantic-debug):
* cedet/semantic/db.el (semanticdb-needs-refresh-p):
* cedet/semantic/db-typecache.el (semanticdb-typecache-refresh-for-buffer):
* cedet/semantic/db-javascript.el (semanticdb-equivalent-mode):
* cedet/semantic/db-find.el (semanticdb-find-log-new-search)
(semanticdb-find-translate-path-includes--internal)
(semanticdb-reset-log, semanticdb-find-log-activity):
* cedet/semantic/db-file.el (object-write):
* cedet/semantic/db-el.el (semanticdb-equivalent-mode):
* cedet/semantic/db-ebrowse.el (semanticdb-ebrowse-C-file-p)
(semanticdb-create-ebrowse-database):
* cedet/semantic/db-debug.el (semanticdb-table-sanity-check):
* cedet/semantic/complete.el (semantic-displayor-focus-request)
(semantic-collector-calculate-completions-raw)
(semantic-complete-read-tag-analyzer):
* cedet/semantic/analyze.el (semantic-analyze-pulse):
* cedet/ede/util.el (ede-update-version-in-source):
* cedet/ede/proj.el (project-delete-target):
* cedet/ede/proj-elisp.el (ede-update-version-in-source)
(ede-proj-flush-autoconf):
* cedet/ede/pconf.el (ede-proj-configure-synchronize)
(ede-proj-configure-synchronize):
* cedet/ede/locate.el (ede-locate-file-in-project-impl):
* cedet/ede/linux.el (ede-linux-version):
* cedet/ede/emacs.el (ede-emacs-version):
* cedet/ede/dired.el (ede-dired-add-to-target):
* cedet/ede.el (ede-buffer-header-file, ede-find-target)
(ede-buffer-documentation-files, ede-project-buffers, ede-set)
(ede-target-buffers, ede-buffers, ede-make-project-local-variable):
* cedet/cedet-idutils.el (cedet-idutils-fnid-call):
(cedet-idutils-lid-call, cedet-idutils-expand-filename)
(cedet-idutils-version-check):
* cedet/cedet-global.el (cedet-gnu-global-call):
(cedet-gnu-global-expand-filename, cedet-gnu-global-root)
(cedet-gnu-global-version-check, cedet-gnu-global-scan-hits):
* cedet/cedet-cscope.el (cedet-cscope-call)
(cedet-cscope-expand-filename, cedet-cscope-version-check):
Use with-current-buffer.
* cedet/ede.el (ede-make-project-local-variable)
(ede-set-project-variables, ede-set): Use dolist.
2009-10-30 02:16:41 +00:00
|
|
|
|
(with-current-buffer (find-file-noselect file)
|
2009-09-19 17:25:30 +00:00
|
|
|
|
(semantic-fetch-tags))))))
|
2009-08-28 15:21:26 +00:00
|
|
|
|
|
|
|
|
|
(semantic-alias-obsolete 'semantic-file-token-stream
|
2009-10-25 02:55:27 +00:00
|
|
|
|
'semantic-file-tag-table "23.2")
|
2009-08-28 15:21:26 +00:00
|
|
|
|
|
|
|
|
|
(defun semantic-something-to-tag-table (something)
|
|
|
|
|
"Convert SOMETHING into a semantic tag table.
|
|
|
|
|
Something can be a tag with a valid BUFFER property, a tag table, a
|
|
|
|
|
buffer, or a filename. If SOMETHING is nil return nil."
|
|
|
|
|
(cond
|
|
|
|
|
;; A list of tags
|
|
|
|
|
((and (listp something)
|
|
|
|
|
(semantic-tag-p (car something)))
|
|
|
|
|
something)
|
|
|
|
|
;; A buffer
|
|
|
|
|
((bufferp something)
|
* cedet/srecode/srt-mode.el (semantic-analyze-possible-completions):
* cedet/semantic/symref/list.el (semantic-symref-rb-toggle-expand-tag):
* cedet/semantic/symref/grep.el (semantic-symref-perform-search):
* cedet/semantic/bovine/gcc.el (semantic-gcc-query):
* cedet/semantic/bovine/c.el (semantic-c-parse-lexical-token):
* cedet/semantic/analyze/debug.el (semantic-analyzer-debug-add-buttons)
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype)
(semantic-analyzer-debug-insert-include-summary):
* cedet/semantic/util.el (semantic-file-tag-table):
(semantic-describe-buffer-var-helper, semantic-something-to-tag-table)
(semantic-recursive-find-nonterminal-by-name):
* cedet/semantic/tag-ls.el (semantic-tag-calculate-parent-default):
* cedet/semantic/tag-file.el (semantic-prototype-file):
* cedet/semantic/symref.el (semantic-symref-parse-tool-output):
* cedet/semantic/sb.el (semantic-sb-fetch-tag-table):
* cedet/semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
* cedet/semantic/idle.el (semantic-idle-work-for-one-buffer):
(semantic-idle-summary-maybe-highlight):
* cedet/semantic/ia-sb.el (semantic-ia-speedbar)
(semantic-ia-sb-tag-info):
* cedet/semantic/grammar.el (semantic-analyze-possible-completions):
* cedet/semantic/find.el (semantic-brute-find-tag-by-position):
* cedet/semantic/ede-grammar.el (project-compile-target):
(ede-proj-makefile-insert-variables):
* cedet/semantic/debug.el (semantic-debug-set-parser-location):
(semantic-debug-set-source-location, semantic-debug-interface-layout)
(semantic-debug-mode, semantic-debug):
* cedet/semantic/db.el (semanticdb-needs-refresh-p):
* cedet/semantic/db-typecache.el (semanticdb-typecache-refresh-for-buffer):
* cedet/semantic/db-javascript.el (semanticdb-equivalent-mode):
* cedet/semantic/db-find.el (semanticdb-find-log-new-search)
(semanticdb-find-translate-path-includes--internal)
(semanticdb-reset-log, semanticdb-find-log-activity):
* cedet/semantic/db-file.el (object-write):
* cedet/semantic/db-el.el (semanticdb-equivalent-mode):
* cedet/semantic/db-ebrowse.el (semanticdb-ebrowse-C-file-p)
(semanticdb-create-ebrowse-database):
* cedet/semantic/db-debug.el (semanticdb-table-sanity-check):
* cedet/semantic/complete.el (semantic-displayor-focus-request)
(semantic-collector-calculate-completions-raw)
(semantic-complete-read-tag-analyzer):
* cedet/semantic/analyze.el (semantic-analyze-pulse):
* cedet/ede/util.el (ede-update-version-in-source):
* cedet/ede/proj.el (project-delete-target):
* cedet/ede/proj-elisp.el (ede-update-version-in-source)
(ede-proj-flush-autoconf):
* cedet/ede/pconf.el (ede-proj-configure-synchronize)
(ede-proj-configure-synchronize):
* cedet/ede/locate.el (ede-locate-file-in-project-impl):
* cedet/ede/linux.el (ede-linux-version):
* cedet/ede/emacs.el (ede-emacs-version):
* cedet/ede/dired.el (ede-dired-add-to-target):
* cedet/ede.el (ede-buffer-header-file, ede-find-target)
(ede-buffer-documentation-files, ede-project-buffers, ede-set)
(ede-target-buffers, ede-buffers, ede-make-project-local-variable):
* cedet/cedet-idutils.el (cedet-idutils-fnid-call):
(cedet-idutils-lid-call, cedet-idutils-expand-filename)
(cedet-idutils-version-check):
* cedet/cedet-global.el (cedet-gnu-global-call):
(cedet-gnu-global-expand-filename, cedet-gnu-global-root)
(cedet-gnu-global-version-check, cedet-gnu-global-scan-hits):
* cedet/cedet-cscope.el (cedet-cscope-call)
(cedet-cscope-expand-filename, cedet-cscope-version-check):
Use with-current-buffer.
* cedet/ede.el (ede-make-project-local-variable)
(ede-set-project-variables, ede-set): Use dolist.
2009-10-30 02:16:41 +00:00
|
|
|
|
(with-current-buffer something
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(semantic-fetch-tags)))
|
|
|
|
|
;; A Tag: Get that tag's buffer
|
|
|
|
|
((and (semantic-tag-with-position-p something)
|
|
|
|
|
(semantic-tag-in-buffer-p something))
|
* cedet/srecode/srt-mode.el (semantic-analyze-possible-completions):
* cedet/semantic/symref/list.el (semantic-symref-rb-toggle-expand-tag):
* cedet/semantic/symref/grep.el (semantic-symref-perform-search):
* cedet/semantic/bovine/gcc.el (semantic-gcc-query):
* cedet/semantic/bovine/c.el (semantic-c-parse-lexical-token):
* cedet/semantic/analyze/debug.el (semantic-analyzer-debug-add-buttons)
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype)
(semantic-analyzer-debug-insert-include-summary):
* cedet/semantic/util.el (semantic-file-tag-table):
(semantic-describe-buffer-var-helper, semantic-something-to-tag-table)
(semantic-recursive-find-nonterminal-by-name):
* cedet/semantic/tag-ls.el (semantic-tag-calculate-parent-default):
* cedet/semantic/tag-file.el (semantic-prototype-file):
* cedet/semantic/symref.el (semantic-symref-parse-tool-output):
* cedet/semantic/sb.el (semantic-sb-fetch-tag-table):
* cedet/semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
* cedet/semantic/idle.el (semantic-idle-work-for-one-buffer):
(semantic-idle-summary-maybe-highlight):
* cedet/semantic/ia-sb.el (semantic-ia-speedbar)
(semantic-ia-sb-tag-info):
* cedet/semantic/grammar.el (semantic-analyze-possible-completions):
* cedet/semantic/find.el (semantic-brute-find-tag-by-position):
* cedet/semantic/ede-grammar.el (project-compile-target):
(ede-proj-makefile-insert-variables):
* cedet/semantic/debug.el (semantic-debug-set-parser-location):
(semantic-debug-set-source-location, semantic-debug-interface-layout)
(semantic-debug-mode, semantic-debug):
* cedet/semantic/db.el (semanticdb-needs-refresh-p):
* cedet/semantic/db-typecache.el (semanticdb-typecache-refresh-for-buffer):
* cedet/semantic/db-javascript.el (semanticdb-equivalent-mode):
* cedet/semantic/db-find.el (semanticdb-find-log-new-search)
(semanticdb-find-translate-path-includes--internal)
(semanticdb-reset-log, semanticdb-find-log-activity):
* cedet/semantic/db-file.el (object-write):
* cedet/semantic/db-el.el (semanticdb-equivalent-mode):
* cedet/semantic/db-ebrowse.el (semanticdb-ebrowse-C-file-p)
(semanticdb-create-ebrowse-database):
* cedet/semantic/db-debug.el (semanticdb-table-sanity-check):
* cedet/semantic/complete.el (semantic-displayor-focus-request)
(semantic-collector-calculate-completions-raw)
(semantic-complete-read-tag-analyzer):
* cedet/semantic/analyze.el (semantic-analyze-pulse):
* cedet/ede/util.el (ede-update-version-in-source):
* cedet/ede/proj.el (project-delete-target):
* cedet/ede/proj-elisp.el (ede-update-version-in-source)
(ede-proj-flush-autoconf):
* cedet/ede/pconf.el (ede-proj-configure-synchronize)
(ede-proj-configure-synchronize):
* cedet/ede/locate.el (ede-locate-file-in-project-impl):
* cedet/ede/linux.el (ede-linux-version):
* cedet/ede/emacs.el (ede-emacs-version):
* cedet/ede/dired.el (ede-dired-add-to-target):
* cedet/ede.el (ede-buffer-header-file, ede-find-target)
(ede-buffer-documentation-files, ede-project-buffers, ede-set)
(ede-target-buffers, ede-buffers, ede-make-project-local-variable):
* cedet/cedet-idutils.el (cedet-idutils-fnid-call):
(cedet-idutils-lid-call, cedet-idutils-expand-filename)
(cedet-idutils-version-check):
* cedet/cedet-global.el (cedet-gnu-global-call):
(cedet-gnu-global-expand-filename, cedet-gnu-global-root)
(cedet-gnu-global-version-check, cedet-gnu-global-scan-hits):
* cedet/cedet-cscope.el (cedet-cscope-call)
(cedet-cscope-expand-filename, cedet-cscope-version-check):
Use with-current-buffer.
* cedet/ede.el (ede-make-project-local-variable)
(ede-set-project-variables, ede-set): Use dolist.
2009-10-30 02:16:41 +00:00
|
|
|
|
(with-current-buffer (semantic-tag-buffer something)
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(semantic-fetch-tags)))
|
|
|
|
|
;; Tag with a file name in it
|
|
|
|
|
((and (semantic-tag-p something)
|
|
|
|
|
(semantic-tag-file-name something)
|
|
|
|
|
(file-exists-p (semantic-tag-file-name something)))
|
|
|
|
|
(semantic-file-tag-table
|
|
|
|
|
(semantic-tag-file-name something)))
|
|
|
|
|
;; A file name
|
|
|
|
|
((and (stringp something)
|
|
|
|
|
(file-exists-p something))
|
|
|
|
|
(semantic-file-tag-table something))
|
|
|
|
|
;; A Semanticdb table
|
2009-09-05 01:00:36 +00:00
|
|
|
|
((and (featurep 'semantic/db)
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(semanticdb-minor-mode-p)
|
|
|
|
|
(semanticdb-abstract-table-child-p something))
|
|
|
|
|
(semanticdb-refresh-table something)
|
|
|
|
|
(semanticdb-get-tags something))
|
|
|
|
|
;; Semanticdb find-results
|
2009-09-05 01:00:36 +00:00
|
|
|
|
((and (featurep 'semantic/db)
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(semanticdb-minor-mode-p)
|
2009-09-05 01:00:36 +00:00
|
|
|
|
(require 'semantic/db-find)
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(semanticdb-find-results-p something))
|
|
|
|
|
(semanticdb-strip-find-results something))
|
|
|
|
|
;; NOTE: This commented out since if a search result returns
|
|
|
|
|
;; empty, that empty would turn into everything on the next search.
|
|
|
|
|
;; Use the current buffer for nil
|
|
|
|
|
;; ((null something)
|
|
|
|
|
;; (semantic-fetch-tags))
|
|
|
|
|
;; don't know what it is
|
|
|
|
|
(t nil)))
|
|
|
|
|
|
|
|
|
|
(semantic-alias-obsolete 'semantic-something-to-stream
|
2009-10-25 02:55:27 +00:00
|
|
|
|
'semantic-something-to-tag-table "23.2")
|
2009-08-28 15:21:26 +00:00
|
|
|
|
|
|
|
|
|
;;; Completion APIs
|
|
|
|
|
;;
|
|
|
|
|
;; These functions provide minibuffer reading/completion for lists of
|
|
|
|
|
;; nonterminals.
|
|
|
|
|
(defvar semantic-read-symbol-history nil
|
|
|
|
|
"History for a symbol read.")
|
|
|
|
|
|
|
|
|
|
(defun semantic-read-symbol (prompt &optional default stream filter)
|
|
|
|
|
"Read a symbol name from the user for the current buffer.
|
|
|
|
|
PROMPT is the prompt to use.
|
|
|
|
|
Optional arguments:
|
|
|
|
|
DEFAULT is the default choice. If no default is given, one is read
|
|
|
|
|
from under point.
|
|
|
|
|
STREAM is the list of tokens to complete from.
|
|
|
|
|
FILTER is provides a filter on the types of things to complete.
|
|
|
|
|
FILTER must be a function to call on each element."
|
|
|
|
|
(if (not default) (setq default (thing-at-point 'symbol)))
|
|
|
|
|
(if (not stream) (setq stream (semantic-fetch-tags)))
|
|
|
|
|
(setq stream
|
|
|
|
|
(if filter
|
|
|
|
|
(semantic--find-tags-by-function filter stream)
|
|
|
|
|
(semantic-brute-find-tag-standard stream)))
|
|
|
|
|
(if (and default (string-match ":" prompt))
|
|
|
|
|
(setq prompt
|
|
|
|
|
(concat (substring prompt 0 (match-end 0))
|
|
|
|
|
" (default: " default ") ")))
|
|
|
|
|
(completing-read prompt stream nil t ""
|
|
|
|
|
'semantic-read-symbol-history
|
|
|
|
|
default))
|
|
|
|
|
|
|
|
|
|
(defun semantic-read-variable (prompt &optional default stream)
|
|
|
|
|
"Read a variable name from the user for the current buffer.
|
|
|
|
|
PROMPT is the prompt to use.
|
|
|
|
|
Optional arguments:
|
|
|
|
|
DEFAULT is the default choice. If no default is given, one is read
|
|
|
|
|
from under point.
|
|
|
|
|
STREAM is the list of tokens to complete from."
|
|
|
|
|
(semantic-read-symbol
|
|
|
|
|
prompt default
|
|
|
|
|
(or (semantic-find-tags-by-class
|
|
|
|
|
'variable (or stream (current-buffer)))
|
|
|
|
|
(error "No local variables"))))
|
|
|
|
|
|
|
|
|
|
(defun semantic-read-function (prompt &optional default stream)
|
|
|
|
|
"Read a function name from the user for the current buffer.
|
|
|
|
|
PROMPT is the prompt to use.
|
|
|
|
|
Optional arguments:
|
|
|
|
|
DEFAULT is the default choice. If no default is given, one is read
|
|
|
|
|
from under point.
|
|
|
|
|
STREAM is the list of tags to complete from."
|
|
|
|
|
(semantic-read-symbol
|
|
|
|
|
prompt default
|
|
|
|
|
(or (semantic-find-tags-by-class
|
|
|
|
|
'function (or stream (current-buffer)))
|
|
|
|
|
(error "No local functions"))))
|
|
|
|
|
|
|
|
|
|
(defun semantic-read-type (prompt &optional default stream)
|
|
|
|
|
"Read a type name from the user for the current buffer.
|
|
|
|
|
PROMPT is the prompt to use.
|
|
|
|
|
Optional arguments:
|
|
|
|
|
DEFAULT is the default choice. If no default is given, one is read
|
|
|
|
|
from under point.
|
|
|
|
|
STREAM is the list of tags to complete from."
|
|
|
|
|
(semantic-read-symbol
|
|
|
|
|
prompt default
|
|
|
|
|
(or (semantic-find-tags-by-class
|
|
|
|
|
'type (or stream (current-buffer)))
|
|
|
|
|
(error "No local types"))))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;; Interactive Functions for
|
|
|
|
|
;;
|
|
|
|
|
(defun semantic-describe-tag (&optional tag)
|
|
|
|
|
"Describe TAG in the minibuffer.
|
|
|
|
|
If TAG is nil, describe the tag under the cursor."
|
|
|
|
|
(interactive)
|
|
|
|
|
(if (not tag) (setq tag (semantic-current-tag)))
|
|
|
|
|
(semantic-fetch-tags)
|
|
|
|
|
(if tag (message (semantic-format-tag-summarize tag))))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;; Putting keys on tags.
|
|
|
|
|
;;
|
|
|
|
|
(defun semantic-add-label (label value &optional tag)
|
|
|
|
|
"Add a LABEL with VALUE on TAG.
|
|
|
|
|
If TAG is not specified, use the tag at point."
|
|
|
|
|
(interactive "sLabel: \nXValue (eval): ")
|
|
|
|
|
(if (not tag)
|
|
|
|
|
(progn
|
|
|
|
|
(semantic-fetch-tags)
|
|
|
|
|
(setq tag (semantic-current-tag))))
|
|
|
|
|
(semantic--tag-put-property tag (intern label) value)
|
|
|
|
|
(message "Added label %s with value %S" label value))
|
|
|
|
|
|
|
|
|
|
(defun semantic-show-label (label &optional tag)
|
|
|
|
|
"Show the value of LABEL on TAG.
|
|
|
|
|
If TAG is not specified, use the tag at point."
|
|
|
|
|
(interactive "sLabel: ")
|
|
|
|
|
(if (not tag)
|
|
|
|
|
(progn
|
|
|
|
|
(semantic-fetch-tags)
|
|
|
|
|
(setq tag (semantic-current-tag))))
|
|
|
|
|
(message "%s: %S" label (semantic--tag-get-property tag (intern label))))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;; Hacks
|
|
|
|
|
;;
|
|
|
|
|
;; Some hacks to help me test these functions
|
|
|
|
|
(defun semantic-describe-buffer-var-helper (varsym buffer)
|
|
|
|
|
"Display to standard out the value of VARSYM in BUFFER."
|
|
|
|
|
(require 'data-debug)
|
* cedet/srecode/srt-mode.el (semantic-analyze-possible-completions):
* cedet/semantic/symref/list.el (semantic-symref-rb-toggle-expand-tag):
* cedet/semantic/symref/grep.el (semantic-symref-perform-search):
* cedet/semantic/bovine/gcc.el (semantic-gcc-query):
* cedet/semantic/bovine/c.el (semantic-c-parse-lexical-token):
* cedet/semantic/analyze/debug.el (semantic-analyzer-debug-add-buttons)
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype)
(semantic-analyzer-debug-insert-include-summary):
* cedet/semantic/util.el (semantic-file-tag-table):
(semantic-describe-buffer-var-helper, semantic-something-to-tag-table)
(semantic-recursive-find-nonterminal-by-name):
* cedet/semantic/tag-ls.el (semantic-tag-calculate-parent-default):
* cedet/semantic/tag-file.el (semantic-prototype-file):
* cedet/semantic/symref.el (semantic-symref-parse-tool-output):
* cedet/semantic/sb.el (semantic-sb-fetch-tag-table):
* cedet/semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
* cedet/semantic/idle.el (semantic-idle-work-for-one-buffer):
(semantic-idle-summary-maybe-highlight):
* cedet/semantic/ia-sb.el (semantic-ia-speedbar)
(semantic-ia-sb-tag-info):
* cedet/semantic/grammar.el (semantic-analyze-possible-completions):
* cedet/semantic/find.el (semantic-brute-find-tag-by-position):
* cedet/semantic/ede-grammar.el (project-compile-target):
(ede-proj-makefile-insert-variables):
* cedet/semantic/debug.el (semantic-debug-set-parser-location):
(semantic-debug-set-source-location, semantic-debug-interface-layout)
(semantic-debug-mode, semantic-debug):
* cedet/semantic/db.el (semanticdb-needs-refresh-p):
* cedet/semantic/db-typecache.el (semanticdb-typecache-refresh-for-buffer):
* cedet/semantic/db-javascript.el (semanticdb-equivalent-mode):
* cedet/semantic/db-find.el (semanticdb-find-log-new-search)
(semanticdb-find-translate-path-includes--internal)
(semanticdb-reset-log, semanticdb-find-log-activity):
* cedet/semantic/db-file.el (object-write):
* cedet/semantic/db-el.el (semanticdb-equivalent-mode):
* cedet/semantic/db-ebrowse.el (semanticdb-ebrowse-C-file-p)
(semanticdb-create-ebrowse-database):
* cedet/semantic/db-debug.el (semanticdb-table-sanity-check):
* cedet/semantic/complete.el (semantic-displayor-focus-request)
(semantic-collector-calculate-completions-raw)
(semantic-complete-read-tag-analyzer):
* cedet/semantic/analyze.el (semantic-analyze-pulse):
* cedet/ede/util.el (ede-update-version-in-source):
* cedet/ede/proj.el (project-delete-target):
* cedet/ede/proj-elisp.el (ede-update-version-in-source)
(ede-proj-flush-autoconf):
* cedet/ede/pconf.el (ede-proj-configure-synchronize)
(ede-proj-configure-synchronize):
* cedet/ede/locate.el (ede-locate-file-in-project-impl):
* cedet/ede/linux.el (ede-linux-version):
* cedet/ede/emacs.el (ede-emacs-version):
* cedet/ede/dired.el (ede-dired-add-to-target):
* cedet/ede.el (ede-buffer-header-file, ede-find-target)
(ede-buffer-documentation-files, ede-project-buffers, ede-set)
(ede-target-buffers, ede-buffers, ede-make-project-local-variable):
* cedet/cedet-idutils.el (cedet-idutils-fnid-call):
(cedet-idutils-lid-call, cedet-idutils-expand-filename)
(cedet-idutils-version-check):
* cedet/cedet-global.el (cedet-gnu-global-call):
(cedet-gnu-global-expand-filename, cedet-gnu-global-root)
(cedet-gnu-global-version-check, cedet-gnu-global-scan-hits):
* cedet/cedet-cscope.el (cedet-cscope-call)
(cedet-cscope-expand-filename, cedet-cscope-version-check):
Use with-current-buffer.
* cedet/ede.el (ede-make-project-local-variable)
(ede-set-project-variables, ede-set): Use dolist.
2009-10-30 02:16:41 +00:00
|
|
|
|
(let ((value (with-current-buffer buffer
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(symbol-value varsym))))
|
|
|
|
|
(cond
|
|
|
|
|
((and (consp value)
|
|
|
|
|
(< (length value) 10))
|
|
|
|
|
;; Draw the list of things in the list.
|
|
|
|
|
(princ (format " %s: #<list of %d items>\n"
|
|
|
|
|
varsym (length value)))
|
|
|
|
|
(data-debug-insert-stuff-list
|
|
|
|
|
value " " )
|
|
|
|
|
)
|
|
|
|
|
(t
|
|
|
|
|
;; Else do a one-liner.
|
|
|
|
|
(data-debug-insert-thing
|
|
|
|
|
value " " (concat " " (symbol-name varsym) ": "))
|
|
|
|
|
))))
|
|
|
|
|
|
|
|
|
|
(defun semantic-describe-buffer ()
|
|
|
|
|
"Describe the semantic environment for the current buffer."
|
|
|
|
|
(interactive)
|
|
|
|
|
(let ((buff (current-buffer))
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
(with-output-to-temp-buffer (help-buffer)
|
2009-11-22 23:49:13 +00:00
|
|
|
|
(help-setup-xref (list #'semantic-describe-buffer)
|
|
|
|
|
(called-interactively-p 'interactive))
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(with-current-buffer standard-output
|
|
|
|
|
(princ "Semantic Configuration in ")
|
|
|
|
|
(princ (buffer-name buff))
|
|
|
|
|
(princ "\n\n")
|
|
|
|
|
|
|
|
|
|
(princ "Buffer specific configuration items:\n")
|
|
|
|
|
(let ((vars '(major-mode
|
|
|
|
|
semantic-case-fold
|
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
2010-09-18 22:49:54 -04:00
|
|
|
|
semantic-tag-expand-function
|
2009-08-28 15:21:26 +00:00
|
|
|
|
semantic-parser-name
|
|
|
|
|
semantic-parse-tree-state
|
|
|
|
|
semantic-lex-analyzer
|
|
|
|
|
semantic-lex-reset-hooks
|
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
2010-09-18 22:49:54 -04:00
|
|
|
|
semantic-lex-syntax-modifications
|
2009-08-28 15:21:26 +00:00
|
|
|
|
)))
|
|
|
|
|
(dolist (V vars)
|
|
|
|
|
(semantic-describe-buffer-var-helper V buff)))
|
|
|
|
|
|
|
|
|
|
(princ "\nGeneral configuration items:\n")
|
|
|
|
|
(let ((vars '(semantic-inhibit-functions
|
2009-09-26 17:47:11 +00:00
|
|
|
|
semantic-init-hook
|
|
|
|
|
semantic-init-db-hook
|
2009-08-28 15:21:26 +00:00
|
|
|
|
semantic-unmatched-syntax-hook
|
|
|
|
|
semantic--before-fetch-tags-hook
|
|
|
|
|
semantic-after-toplevel-bovinate-hook
|
|
|
|
|
semantic-after-toplevel-cache-change-hook
|
|
|
|
|
semantic-before-toplevel-cache-flush-hook
|
|
|
|
|
semantic-dump-parse
|
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
2010-09-18 22:49:54 -04:00
|
|
|
|
semantic-type-relation-separator-character
|
|
|
|
|
semantic-command-separation-character
|
2009-08-28 15:21:26 +00:00
|
|
|
|
)))
|
|
|
|
|
(dolist (V vars)
|
|
|
|
|
(semantic-describe-buffer-var-helper V buff)))
|
|
|
|
|
|
|
|
|
|
(princ "\n\n")
|
|
|
|
|
(mode-local-describe-bindings-2 buff)
|
|
|
|
|
)))
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
(defun semantic-assert-valid-token (tok)
|
|
|
|
|
"Assert that TOK is a valid token."
|
|
|
|
|
(if (semantic-tag-p tok)
|
|
|
|
|
(if (semantic-tag-with-position-p tok)
|
|
|
|
|
(let ((o (semantic-tag-overlay tok)))
|
|
|
|
|
(if (and (semantic-overlay-p o)
|
|
|
|
|
(not (semantic-overlay-live-p o)))
|
|
|
|
|
(let ((debug-on-error t))
|
|
|
|
|
(error "Tag %s is invalid!" (semantic-tag-name tok)))
|
|
|
|
|
;; else, tag is OK.
|
|
|
|
|
))
|
|
|
|
|
;; Positionless tags are also ok.
|
|
|
|
|
)
|
|
|
|
|
(let ((debug-on-error t))
|
|
|
|
|
(error "Not a semantic tag: %S" tok))))
|
|
|
|
|
|
|
|
|
|
(defun semantic-sanity-check (&optional cache over notfirst)
|
|
|
|
|
"Perform a sanity check on the current buffer.
|
|
|
|
|
The buffer's set of overlays, and those overlays found via the cache
|
|
|
|
|
are verified against each other.
|
|
|
|
|
CACHE, and OVER are the semantic cache, and the overlay list.
|
|
|
|
|
NOTFIRST indicates that this was not the first call in the recursive use."
|
|
|
|
|
(interactive)
|
|
|
|
|
(if (and (not cache) (not over) (not notfirst))
|
|
|
|
|
(setq cache semantic--buffer-cache
|
|
|
|
|
over (semantic-overlays-in (point-min) (point-max))))
|
|
|
|
|
(while cache
|
|
|
|
|
(let ((chil (semantic-tag-components-with-overlays (car cache))))
|
|
|
|
|
(if (not (memq (semantic-tag-overlay (car cache)) over))
|
|
|
|
|
(message "Tag %s not in buffer overlay list."
|
|
|
|
|
(semantic-format-tag-concise-prototype (car cache))))
|
|
|
|
|
(setq over (delq (semantic-tag-overlay (car cache)) over))
|
|
|
|
|
(setq over (semantic-sanity-check chil over t))
|
|
|
|
|
(setq cache (cdr cache))))
|
|
|
|
|
(if (not notfirst)
|
|
|
|
|
;; Strip out all overlays which aren't semantic overlays
|
|
|
|
|
(let ((o nil))
|
|
|
|
|
(while over
|
|
|
|
|
(when (and (semantic-overlay-get (car over) 'semantic)
|
|
|
|
|
(not (eq (semantic-overlay-get (car over) 'semantic)
|
|
|
|
|
'unmatched)))
|
|
|
|
|
(setq o (cons (car over) o)))
|
|
|
|
|
(setq over (cdr over)))
|
Synch Semantic to CEDET 1.0.
Move CEDET ChangeLog entries to new file lisp/cedet/ChangeLog.
* semantic.el (semantic-version): Update to 2.0.
(semantic-mode-map): Add "," and "m" bindings.
(navigate-menu): Update.
* semantic/symref.el (semantic-symref-calculate-rootdir):
New function.
(semantic-symref-detect-symref-tool): Use it.
* semantic/symref/grep.el (semantic-symref-grep-shell): New var.
(semantic-symref-perform-search): Use it. Calculate root dir with
semantic-symref-calculate-rootdir.
(semantic-symref-derive-find-filepatterns): Improve error message.
* semantic/symref/list.el
(semantic-symref-results-mode-map): New bindings.
(semantic-symref-auto-expand-results): New option.
(semantic-symref-results-dump): Obey auto-expand.
(semantic-symref-list-expand-all, semantic-symref-regexp)
(semantic-symref-list-contract-all)
(semantic-symref-list-map-open-hits)
(semantic-symref-list-update-open-hits)
(semantic-symref-list-create-macro-on-open-hit)
(semantic-symref-list-call-macro-on-open-hits): New functions.
(semantic-symref-list-menu-entries)
(semantic-symref-list-menu): New vars.
(semantic-symref-list-map-open-hits): Move cursor to beginning of
match before calling the mapped function.
* semantic/doc.el
(semantic-documentation-comment-preceeding-tag): Do nothing if the
mode doesn't provide comment-start-skip.
* semantic/scope.el
(semantic-analyze-scope-nested-tags-default): Strip duplicates.
(semantic-analyze-scoped-inherited-tag-map): Take the tag we are
looking for as part of the scoped tags list.
* semantic/html.el (semantic-default-html-setup): Add
senator-step-at-tag-classes.
* semantic/decorate/include.el
(semantic-decoration-on-unknown-includes): Change light bgcolor.
(semantic-decoration-on-includes-highlight-default): Check that
the include tag has a postion.
* semantic/complete.el (semantic-collector-local-members):
(semantic-complete-read-tag-local-members)
(semantic-complete-jump-local-members): New class and functions.
(semantic-complete-self-insert): Save excursion before completing.
* semantic/analyze/complete.el
(semantic-analyze-possible-completions-default): If no completions
are found, return the raw by-name-only completion list. Add FLAGS
arguments. Add support for 'no-tc (type constraint) and
'no-unique, or no stripping duplicates.
(semantic-analyze-possible-completions-default): Add FLAGS arg.
* semantic/util-modes.el
(semantic-stickyfunc-show-only-functions-p): New option.
(semantic-stickyfunc-fetch-stickyline): Don't show stickytext for
the very first line in a buffer.
* semantic/util.el (semantic-hack-search)
(semantic-recursive-find-nonterminal-by-name)
(semantic-current-tag-interactive): Deleted.
(semantic-describe-buffer): Fix expand-nonterminal. Add
lex-syntax-mods, type relation separator char, and command
separation char.
(semantic-sanity-check): Only message if called interactively.
* semantic/tag.el (semantic-tag-deep-copy-one-tag): Copy the
:filename property and the tag position.
* semantic/lex-spp.el (semantic-lex-spp-lex-text-string):
Add recursion limit.
* semantic/imenu.el (semantic-imenu-bucketize-type-members):
Make this buffer local, not the obsoleted variable.
* semantic/idle.el: Add breadcrumbs support.
(semantic-idle-summary-current-symbol-info-default)
(semantic-idle-tag-highlight)
(semantic-idle-completion-list-default): Use
semanticdb-without-unloaded-file-searches for speed, and to
conform to the controls that specify if the idle timer is supposed
to be parsing unparsed includes.
(semantic-idle-symbol-highlight-face)
(semantic-idle-symbol-maybe-highlight): Rename from *-summary-*.
Callers changed.
(semantic-idle-work-parse-neighboring-files-flag): Default to nil.
(semantic-idle-work-update-headers-flag): New var.
(semantic-idle-work-for-one-buffer): Use it.
(semantic-idle-local-symbol-highlight): Rename from
semantic-idle-tag-highlight.
(semantic-idle-truncate-long-summaries): New option.
* semantic/ia.el (semantic-ia-cache)
(semantic-ia-get-completions): Deleted. Callers changed.
(semantic-ia-show-variants): New command.
(semantic-ia-show-doc): If doc is empty, don't make a temp buffer.
(semantic-ia-show-summary): If there isn't anything to show, say so.
* semantic/grammar.el (semantic-grammar-create-package):
Save the buffer even in batch mode.
* semantic/fw.el
(semanticdb-without-unloaded-file-searches): New macro.
* semantic/dep.el (semantic-dependency-find-file-on-path):
Fix case dereferencing ede-object when it is a list.
* semantic/db-typecache.el (semanticdb-expand-nested-tag)
(semanticdb-typecache-faux-namespace): New functions.
(semanticdb-typecache-file-tags)
(semanticdb-typecache-merge-streams): Use them.
(semanticdb-typecache-file-tags): When deriving tags from a file,
give the mode a chance to monkey with the tag copy.
(semanticdb-typecache-find-default): Wrap find in save-excursion.
(semanticdb-typecache-find-by-name-helper): Merge found names down.
* semantic/db-global.el
(semanticdb-enable-gnu-global-in-buffer): Don't show messages if
GNU Global is not available and we don't want to throw an error.
* semantic/db-find.el (semanticdb-find-result-nth-in-buffer):
When trying to normalize the tag to a buffer, don't error if
set-buffer method doesn't exist.
* semantic/db-file.el (semanticdb-save-db): Simplify msg.
* semantic/db.el (semanticdb-refresh-table): If forcing a
refresh on a file not in a buffer, use semantic-find-file-noselect
and delete the buffer after use.
(semanticdb-current-database-list): When calculating root via
hooks, force it through true-filename and skip the list of
possible roots.
* semantic/ctxt.el (semantic-ctxt-imported-packages): New.
* semantic/analyze/debug.el
(semantic-analyzer-debug-insert-tag): Reset standard output to
current buffer.
(semantic-analyzer-debug-global-symbol)
(semantic-analyzer-debug-missing-innertype): Change "prefix" to
"symbol" in messages.
* semantic/analyze/refs.el: (semantic-analyze-refs-impl)
(semantic-analyze-refs-proto): When calculating value, make sure
the found tag is 'similar' to the originating tag.
(semantic--analyze-refs-find-tags-with-parent): Attempt to
identify matches via imported symbols of parents.
(semantic--analyze-refs-full-lookup-with-parents): Do a deep
search during the brute search.
* semantic/analyze.el
(semantic-analyze-find-tag-sequence-default): Be robust to
calculated scopes being nil.
* semantic/bovine/c.el (semantic-c-describe-environment): Add
project macro symbol array.
(semantic-c-parse-lexical-token): Add recursion limit.
(semantic-ctxt-imported-packages, semanticdb-expand-nested-tag):
New overrides.
(semantic-expand-c-tag-namelist): Split a full type from a typedef
out to its own tag.
(semantic-expand-c-tag-namelist): Do not split out a typedef'd
inline type if it is an anonymous type.
(semantic-c-reconstitute-token): Use the optional initializers as
a clue that some function is probably a constructor. When
defining the type of these constructors, split the parent name,
and use only the class part, if applicable.
* semantic/bovine/c-by.el:
* semantic/wisent/python-wy.el: Regenerate.
2010-09-18 22:49:54 -04:00
|
|
|
|
(when (called-interactively-p 'any)
|
|
|
|
|
(message "Remaining overlays: %S" o))))
|
2009-08-28 15:21:26 +00:00
|
|
|
|
over)
|
|
|
|
|
|
2009-09-21 15:59:48 +00:00
|
|
|
|
;;; Interactive commands (from Senator).
|
|
|
|
|
|
|
|
|
|
;; The Senator library from upstream CEDET is not included in the
|
|
|
|
|
;; built-in version of Emacs. The plan is to fold it into the
|
|
|
|
|
;; different parts of CEDET and Emacs, so that it works
|
|
|
|
|
;; "transparently". Here are some interactive commands based on
|
|
|
|
|
;; Senator.
|
|
|
|
|
|
2009-09-26 17:47:11 +00:00
|
|
|
|
;; Symbol completion
|
|
|
|
|
|
2009-09-21 15:59:48 +00:00
|
|
|
|
(defun semantic-find-tag-for-completion (prefix)
|
|
|
|
|
"Find all tags with name starting with PREFIX.
|
|
|
|
|
This uses `semanticdb' when available."
|
|
|
|
|
(let (result ctxt)
|
2009-09-26 17:47:11 +00:00
|
|
|
|
;; Try the Semantic analyzer
|
2009-09-21 15:59:48 +00:00
|
|
|
|
(condition-case nil
|
|
|
|
|
(and (featurep 'semantic/analyze)
|
|
|
|
|
(setq ctxt (semantic-analyze-current-context))
|
|
|
|
|
(setq result (semantic-analyze-possible-completions ctxt)))
|
|
|
|
|
(error nil))
|
|
|
|
|
(or result
|
|
|
|
|
;; If the analyzer fails, then go into boring completion.
|
2009-09-28 15:15:00 +00:00
|
|
|
|
(if (and (featurep 'semantic/db)
|
|
|
|
|
(semanticdb-minor-mode-p)
|
|
|
|
|
(require 'semantic/db-find))
|
2009-09-21 15:59:48 +00:00
|
|
|
|
(semanticdb-fast-strip-find-results
|
|
|
|
|
(semanticdb-deep-find-tags-for-completion prefix))
|
|
|
|
|
(semantic-deep-find-tags-for-completion prefix (current-buffer))))))
|
|
|
|
|
|
|
|
|
|
(defun semantic-complete-symbol (&optional predicate)
|
|
|
|
|
"Complete the symbol under point, using Semantic facilities.
|
|
|
|
|
When called from a program, optional arg PREDICATE is a predicate
|
|
|
|
|
determining which symbols are considered."
|
|
|
|
|
(interactive)
|
2009-09-28 15:15:00 +00:00
|
|
|
|
(require 'semantic/ctxt)
|
2009-09-21 15:59:48 +00:00
|
|
|
|
(let* ((start (car (nth 2 (semantic-ctxt-current-symbol-and-bounds
|
|
|
|
|
(point)))))
|
|
|
|
|
(pattern (regexp-quote (buffer-substring start (point))))
|
|
|
|
|
collection completion)
|
|
|
|
|
(when start
|
|
|
|
|
(if (and semantic--completion-cache
|
|
|
|
|
(eq (nth 0 semantic--completion-cache) (current-buffer))
|
|
|
|
|
(= (nth 1 semantic--completion-cache) start)
|
|
|
|
|
(save-excursion
|
|
|
|
|
(goto-char start)
|
|
|
|
|
(looking-at (nth 3 semantic--completion-cache))))
|
|
|
|
|
;; Use cached value.
|
|
|
|
|
(setq collection (nthcdr 4 semantic--completion-cache))
|
|
|
|
|
;; Perform new query.
|
|
|
|
|
(setq collection (semantic-find-tag-for-completion pattern))
|
|
|
|
|
(setq semantic--completion-cache
|
|
|
|
|
(append (list (current-buffer) start 0 pattern)
|
|
|
|
|
collection))))
|
|
|
|
|
(if (null collection)
|
|
|
|
|
(let ((str (if pattern (format " for \"%s\"" pattern) "")))
|
|
|
|
|
(if (window-minibuffer-p (selected-window))
|
|
|
|
|
(minibuffer-message (format " [No completions%s]" str))
|
|
|
|
|
(message "Can't find completion%s" str)))
|
|
|
|
|
(setq completion (try-completion pattern collection predicate))
|
|
|
|
|
(if (string= pattern completion)
|
|
|
|
|
(let ((list (all-completions pattern collection predicate)))
|
|
|
|
|
(setq list (sort list 'string<))
|
|
|
|
|
(if (> (length list) 1)
|
|
|
|
|
(with-output-to-temp-buffer "*Completions*"
|
|
|
|
|
(display-completion-list list pattern))
|
|
|
|
|
;; Bury any out-of-date completions buffer.
|
|
|
|
|
(let ((win (get-buffer-window "*Completions*" 0)))
|
|
|
|
|
(if win (with-selected-window win (bury-buffer))))))
|
|
|
|
|
;; Exact match
|
|
|
|
|
(delete-region start (point))
|
|
|
|
|
(insert completion)
|
|
|
|
|
;; Bury any out-of-date completions buffer.
|
|
|
|
|
(let ((win (get-buffer-window "*Completions*" 0)))
|
|
|
|
|
(if win (with-selected-window win (bury-buffer))))))))
|
|
|
|
|
|
2009-08-28 15:21:26 +00:00
|
|
|
|
(provide 'semantic/util)
|
|
|
|
|
|
|
|
|
|
;;; Minor modes
|
|
|
|
|
;;
|
|
|
|
|
(require 'semantic/util-modes)
|
|
|
|
|
|
2009-10-02 10:53:34 +00:00
|
|
|
|
;; arch-tag: eaa7808d-83b9-43fe-adf0-4fb742dcb956
|
2009-09-03 03:58:13 +00:00
|
|
|
|
;;; semantic/util.el ends here
|