changeset 91776:01d2b6c9032f

Add many doc strings.
author Richard M. Stallman <rms@gnu.org>
date Mon, 11 Feb 2008 17:35:37 +0000
parents aab40ecbce33
children ccba4c75c028
files lisp/progmodes/etags.el
diffstat 1 files changed, 105 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/etags.el	Mon Feb 11 11:31:13 2008 +0000
+++ b/lisp/progmodes/etags.el	Mon Feb 11 17:35:37 2008 +0000
@@ -258,11 +258,11 @@
 (defvar verify-tags-table-function nil
   "Function to return t if current buffer contains valid tags file.")
 
-;; Initialize the tags table in the current buffer.
-;; Returns non-nil if it is a valid tags table.  On
-;; non-nil return, the tags table state variable are
-;; made buffer-local and initialized to nil.
 (defun initialize-new-tags-table ()
+  "Initialize the tags table in the current buffer.
+Return non-nil if it is a valid tags table, and
+in that case, also make the tags table state variables 
+buffer-local and set them to nil."
   (set (make-local-variable 'tags-table-files) nil)
   (set (make-local-variable 'tags-completion-table) nil)
   (set (make-local-variable 'tags-included-tables) nil)
@@ -357,13 +357,13 @@
 	  (setq tags-table-computed-list-for compute-for
 		tags-table-computed-list (nreverse computed))))))
 
-;; Extend `tags-table-computed-list' to remove the first `t' placeholder.
-;; An element of the list that is `t' is a placeholder indicating that the
-;; preceding element is a table that has not been read into core and might
-;; contain included tables to search.  On return, the first placeholder
-;; element will be gone and the element before it read into core and its
-;; included tables inserted into the list.
 (defun tags-table-extend-computed-list ()
+  "Extend `tags-table-computed-list' to remove the first t placeholder.
+
+An element of the list that is t is a placeholder indicating that the
+preceding element is a table that has not been read in and might
+contain included tables to search.  This function reads in the first
+such table and puts its included tables into the list."
   (let ((list tags-table-computed-list))
     (while (not (eq (nth 1 list) t))
       (setq list (cdr list)))
@@ -398,8 +398,8 @@
 	;; It was not a valid table, so just remove the following placeholder.
 	(setcdr list (cdr (cdr list)))))))
 
-;; Expand tags table name FILE into a complete file name.
 (defun tags-expand-table-name (file)
+  "Expand tags table name FILE into a complete file name."
   (setq file (expand-file-name file))
   (if (file-directory-p file)
       (expand-file-name "TAGS" file)
@@ -408,6 +408,10 @@
 ;; Like member, but comparison is done after tags-expand-table-name on both
 ;; sides and elements of LIST that are t are skipped.
 (defun tags-table-list-member (file list)
+  "Like (member FILE LIST) after applying `tags-expand-table-name'.
+More precisely, apply `tags-expand-table-name' to FILE
+and each element of LIST, returning the link whose car is the first match.
+If an element of LIST is t, ignore it."
   (setq file (tags-expand-table-name file))
   (while (and list
 	      (or (eq (car list) t)
@@ -464,6 +468,12 @@
 ;; we return.  If CORE-ONLY is non-nil, check only tags tables that are
 ;; already in buffers--don't visit any new files.
 (defun tags-table-including (this-file core-only)
+  "Search current tags tables for tags for THIS-FILE.
+Subroutine of `visit-tags-table-buffer'.
+Looks for a tags table that has such tags or that includes a table
+that has them.  Returns the name of the first such table.
+Non-nil CORE-ONLY means check only tags tables that are already in
+buffers.  Nil CORE-ONLY is ignored."
   (let ((tables tags-table-computed-list)
 	(found nil))
     ;; Loop over the list, looking for a table containing tags for THIS-FILE.
@@ -509,9 +519,10 @@
 	  ;; included the one we found.
 	  could-be))))
 
-;; Subroutine of visit-tags-table-buffer.  Move tags-table-list-pointer
-;; along and set tags-file-name.  Returns nil when out of tables.
 (defun tags-next-table ()
+  "Move `tags-table-list-pointer' along and set `tags-file-name'.
+Subroutine of `visit-tags-table-buffer'.\
+Returns nil when out of tables."
   ;; If there is a placeholder element next, compute the list to replace it.
   (while (eq (nth 1 tags-table-list-pointer) t)
     (tags-table-extend-computed-list))
@@ -672,7 +683,7 @@
 					  tags-table-set-list)))
 			  ;; Clear out buffers holding old tables.
 			  (dolist (table tags-table-list)
-			    ;; The list can contain items `t'.
+			    ;; The list can contain items t.
 			    (if (stringp table)
 				(let ((buffer (find-buffer-visiting table)))
 			      (if buffer
@@ -742,10 +753,10 @@
   (or tags-included-tables
       (setq tags-included-tables (funcall tags-included-tables-function))))
 
-;; Build tags-completion-table on demand.  The single current tags table
-;; and its included tags tables (and their included tables, etc.) have
-;; their tags included in the completion table.
 (defun tags-completion-table ()
+  "Build `tags-completion-table' on demand.
+The tags included in the completion table are those in the current
+tags table and its (recursively) included tags tables."
   (or tags-completion-table
       ;; No cached value for this buffer.
       (condition-case ()
@@ -769,9 +780,10 @@
 	(quit (message "Tags completion table construction aborted.")
 	      (setq tags-completion-table nil)))))
 
-;; Completion function for tags.  Does normal try-completion,
-;; but builds tags-completion-table on demand.
 (defun tags-complete-tag (string predicate what)
+  "Completion function for tags.
+Does normal `try-completion', but builds `tags-completion-table' on
+demand."
   (save-excursion
     ;; If we need to ask for the tag table, allow that.
     (let ((enable-recursive-minibuffers t))
@@ -780,8 +792,8 @@
 	(all-completions string (tags-completion-table) predicate)
       (try-completion string (tags-completion-table) predicate))))
 
-;; Read a tag name from the minibuffer with defaulting and completion.
 (defun find-tag-tag (string)
+  "Read a tag name, with defaulting and completion."
   (let* ((completion-ignore-case (if (memq tags-case-fold-search '(t nil))
 				     tags-case-fold-search
 				   case-fold-search))
@@ -802,8 +814,10 @@
 (defvar last-tag nil
   "Last tag found by \\[find-tag].")
 
-;; Get interactive args for find-tag{-noselect,-other-window,-regexp}.
 (defun find-tag-interactive (prompt &optional no-default)
+  "Get interactive arguments for tag functions.
+The functions using this are `find-tag-noselect',
+`find-tag-other-window', and `find-tag-regexp'."
   (if (and current-prefix-arg last-tag)
       (list nil (if (< (prefix-numeric-value current-prefix-arg) 0)
 		    '-
@@ -812,7 +826,7 @@
 	      (read-string prompt)
 	    (find-tag-tag prompt)))))
 
-(defvar find-tag-history nil)
+(defvar find-tag-history nil) ; Doc string?
 
 ;; Dynamic bondage:
 (eval-when-compile
@@ -1028,26 +1042,8 @@
     (goto-char (marker-position marker))
     (set-marker marker nil nil)))
 
-;; Internal tag finding function.
-
-;; PATTERN is a string to pass to second arg SEARCH-FORWARD-FUNC, and to
-;; any member of the function list ORDER (third arg).  If ORDER is nil,
-;; use saved state to continue a previous search.
-
-;; Fourth arg NEXT-LINE-AFTER-FAILURE-P is non-nil if after a failed match,
-;; point should be moved to the next line.
-
-;; Fifth arg MATCHING is a string, an English '-ing' word, to be used in
-;; an error message.
-
-;; Algorithm is as follows.  For each qualifier-func in ORDER, go to
-;; beginning of tags file, and perform inner loop: for each naive match for
-;; PATTERN found using SEARCH-FORWARD-FUNC, qualify the naive match using
-;; qualifier-func.  If it qualifies, go to the specified line in the
-;; specified source file and return.  Qualified matches are remembered to
-;; avoid repetition.  State is saved so that the loop can be continued.
-
-(defvar tag-lines-already-matched nil)	;matches remembered here between calls
+(defvar tag-lines-already-matched nil
+  "Matches remembered between calls.") ; Doc string: calls to what?
 
 (defun find-tag-in-order (pattern
 			  search-forward-func
@@ -1055,6 +1051,23 @@
 			  next-line-after-failure-p
 			  matching
 			  first-search)
+  "Internal tag-finding function.
+PATTERN is a string to pass to arg SEARCH-FORWARD-FUNC, and to any
+member of the function list ORDER.  If ORDER is nil, use saved state
+to continue a previous search.
+
+Arg NEXT-LINE-AFTER-FAILURE-P is non-nil if after a failed match,
+point should be moved to the next line.
+
+Arg MATCHING is a string, an English `-ing' word, to be used in an
+error message."
+;; Algorithm is as follows:
+;; For each qualifier-func in ORDER, go to beginning of tags file, and
+;; perform inner loop: for each naive match for PATTERN found using
+;; SEARCH-FORWARD-FUNC, qualify the naive match using qualifier-func.  If
+;; it qualifies, go to the specified line in the specified source file
+;; and return.  Qualified matches are remembered to avoid repetition.
+;; State is saved so that the loop can be continued.
   (let (file				;name of file containing tag
 	tag-info			;where to find the tag in FILE
 	(first-table t)
@@ -1147,10 +1160,9 @@
       (current-buffer))))
 
 (defun tag-find-file-of-tag-noselect (file)
-  ;; Find the right line in the specified file.
-  ;; If we are interested in compressed-files,
-  ;; we search files with extensions.
-  ;; otherwise only the real file.
+  "Find the right line in the specified FILE."
+  ;; If interested in compressed-files, search files with extensions.
+  ;; Otherwise, search only the real file.
   (let* ((buffer-search-extensions (if (featurep 'jka-compr)
 				       tags-compression-info-list
 				     '("")))
@@ -1180,7 +1192,7 @@
 	  (error "File %s not found" file))
       (set-buffer the-buffer))))
 
-(defun tag-find-file-of-tag (file)
+(defun tag-find-file-of-tag (file) ; Doc string?
   (let ((buf (tag-find-file-of-tag-noselect file)))
     (condition-case nil
 	(switch-to-buffer buf)
@@ -1188,9 +1200,10 @@
 
 ;; `etags' TAGS file format support.
 
-;; If the current buffer is a valid etags TAGS file, give it local values of
-;; the tags table format variables, and return non-nil.
 (defun etags-recognize-tags-table ()
+  "If `etags-verify-tags-table', make buffer-local format variables.
+If current buffer is a valid etags TAGS file, then give it
+buffer-local values of tags table format variables."
   (and (etags-verify-tags-table)
        ;; It is annoying to flash messages on the screen briefly,
        ;; and this message is not useful.  -- rms
@@ -1225,7 +1238,7 @@
   ;; Use eq instead of = in case char-after returns nil.
   (eq (char-after (point-min)) ?\f))
 
-(defun etags-file-of-tag (&optional relative)
+(defun etags-file-of-tag (&optional relative) ; Doc string?
   (save-excursion
     (re-search-backward "\f\n\\([^\n]+\\),[0-9]*\n")
     (let ((str (buffer-substring (match-beginning 1) (match-end 1))))
@@ -1235,7 +1248,7 @@
 			  (file-truename default-directory))))))
 
 
-(defun etags-tags-completion-table ()
+(defun etags-tags-completion-table () ; Doc string?
   (let ((table (make-vector 511 0))
 	(progress-reporter
 	 (make-progress-reporter
@@ -1265,7 +1278,7 @@
 		table)))
     table))
 
-(defun etags-snarf-tag (&optional use-explicit)
+(defun etags-snarf-tag (&optional use-explicit) ; Doc string?
   (let (tag-text line startpos explicit-start)
     (if (save-excursion
 	  (forward-line -1)
@@ -1305,15 +1318,20 @@
     (forward-line 1)
     (cons tag-text (cons line startpos))))
 
-;; TAG-INFO is a cons (TEXT LINE . POSITION) where TEXT is the initial part
-;; of a line containing the tag and POSITION is the character position of
-;; TEXT within the file (starting from 1); LINE is the line number.  If
-;; TEXT is t, it means the tag refers to exactly LINE or POSITION
-;; (whichever is present, LINE having preference, no searching.  Either
-;; LINE or POSITION may be nil; POSITION is used if present.  If the tag
-;; isn't exactly at the given position then look around that position using
-;; a search window which expands until it hits the start of file.
 (defun etags-goto-tag-location (tag-info)
+  "Go to location of tag specified by TAG-INFO.
+TAG-INFO is a cons (TEXT LINE . POSITION).
+TEXT is the initial part of a line containing the tag.
+LINE is the line number.
+POSITION is the (one-based) char position of TEXT within the file.
+
+If TEXT is t, it means the tag refers to exactly LINE or POSITION,
+whichever is present, LINE having preference, no searching.
+Either LINE or POSITION can be nil.  POSITION is used if present.
+
+If the tag isn't exactly at the given position, then look near that
+position using a search window that expands progressively until it
+hits the start of file."
   (let ((startpos (cdr (cdr tag-info)))
 	(line (car (cdr tag-info)))
 	offset found pat)
@@ -1362,7 +1380,7 @@
 	 (forward-char 1))
     (beginning-of-line)))
 
-(defun etags-list-tags (file)
+(defun etags-list-tags (file) ; Doc string?
   (goto-char (point-min))
   (when (re-search-forward (concat "\f\n" "\\(" file "\\)" ",") nil t)
     (let ((path (save-excursion (forward-line 1) (file-of-tag)))
@@ -1435,7 +1453,7 @@
 	    (funcall ins-symb (car sy))))
         (sort-lines nil beg (point))))))
 
-(defun etags-tags-apropos (string)
+(defun etags-tags-apropos (string) ; Doc string?
   (when tags-apropos-verbose
     (princ "Tags in file `")
     (tags-with-face 'highlight (princ buffer-file-name))
@@ -1496,7 +1514,7 @@
     (message nil))
   (when tags-apropos-verbose (princ "\n")))
 
-(defun etags-tags-table-files ()
+(defun etags-tags-table-files () ; Doc string?
   (let ((files nil)
 	beg)
     (goto-char (point-min))
@@ -1508,7 +1526,7 @@
 	  (setq files (cons (buffer-substring beg (1- (point))) files))))
     (nreverse files)))
 
-(defun etags-tags-included-tables ()
+(defun etags-tags-included-tables () ; Doc string?
   (let ((files nil)
 	beg)
     (goto-char (point-min))
@@ -1524,9 +1542,10 @@
 
 ;; Empty tags file support.
 
-;; Recognize an empty file and give it local values of the tags table format
-;; variables which do nothing.
 (defun tags-recognize-empty-tags-table ()
+  "Return non-nil if current buffer is empty.
+If empty, make buffer-local values of the tags table format variables
+that do nothing."
   (and (zerop (buffer-size))
        (mapc (lambda (sym) (set (make-local-variable sym) 'ignore))
 	     '(tags-table-files-function
@@ -1560,15 +1579,20 @@
 ;; exact file name match, i.e. searched tag must match complete file
 ;; name including directories parts if there are some.
 (defun tag-exact-file-name-match-p (tag)
+  "Return non-nil if TAG matches complete file name.
+Any directory part of the file name is also matched."
   (and (looking-at ",[0-9\n]")
        (save-excursion (backward-char (+ 2 (length tag)))
 		       (looking-at "\f\n"))))
+
 ;; file name match as above, but searched tag must match the file
 ;; name not including the directories if there are some.
 (defun tag-file-name-match-p (tag)
+  "Return non-nil if TAG matches file name, excluding directory part."
   (and (looking-at ",[0-9\n]")
        (save-excursion (backward-char (1+ (length tag)))
 		       (looking-at "/"))))
+
 ;; this / to detect we are after a directory separator is ok for unix,
 ;; is there a variable that contains the regexp for directory separator
 ;; on whatever operating system ?
@@ -1577,6 +1601,8 @@
 ;; t if point is at a tag line that matches TAG exactly.
 ;; point should be just after a string that matches TAG.
 (defun tag-exact-match-p (tag)
+  "Return non-nil if current tag line matches TAG exactly.
+Point should be just after a string that matches TAG."
   ;; The match is really exact if there is an explicit tag name.
   (or (and (eq (char-after (point)) ?\001)
 	   (eq (char-after (- (point) (length tag) 1)) ?\177))
@@ -1586,6 +1612,8 @@
 ;; t if point is at a tag line that has an implicit name.
 ;; point should be just after a string that matches TAG.
 (defun tag-implicit-name-match-p (tag)
+  "Return non-nil if current tag line has an implicit name.
+Point should be just after a string that matches TAG."
   ;; Look at the comment of the make_tag function in lib-src/etags.c for
   ;; a textual description of the four rules.
   (and (string-match "^[^ \t()=,;]+$" tag) ;rule #1
@@ -1597,6 +1625,8 @@
 ;; t if point is at a tag line that matches TAG as a symbol.
 ;; point should be just after a string that matches TAG.
 (defun tag-symbol-match-p (tag)
+  "Return non-nil if current tag line matches TAG as a symbol.
+Point should be just after a string that matches TAG."
   (and (looking-at "\\Sw.*\177") (looking-at "\\S_.*\177")
        (save-excursion
 	 (backward-char (1+ (length tag)))
@@ -1605,6 +1635,8 @@
 ;; t if point is at a tag line that matches TAG as a word.
 ;; point should be just after a string that matches TAG.
 (defun tag-word-match-p (tag)
+  "Return non-nil if current tag line matches TAG as a word.
+Point should be just after a string that matches TAG."
   (and (looking-at "\\b.*\177")
        (save-excursion (backward-char (length tag))
 		       (looking-at "\\b"))))
@@ -1612,6 +1644,9 @@
 ;; partial file name match, i.e. searched tag must match a substring
 ;; of the file name (potentially including a directory separator).
 (defun tag-partial-file-name-match-p (tag)
+  "Return non-nil if current tag matches file name.
+This is a substring match, and it can include directory separators.
+Point should be just after a string that matches TAG."
   (and (looking-at ".*,[0-9\n]")
        (save-excursion (beginning-of-line)
                        (backward-char 2)
@@ -1619,10 +1654,12 @@
 
 ;; t if point is in a tag line with a tag containing TAG as a substring.
 (defun tag-any-match-p (tag)
+  "Return non-nil if current tag line contains TAG as a substring."
   (looking-at ".*\177"))
 
 ;; t if point is at a tag line that matches RE as a regexp.
 (defun tag-re-match-p (re)
+  "Return non-nil if current tag line matches regexp RE."
   (save-excursion
     (beginning-of-line)
     (let ((bol (point)))
@@ -1845,7 +1882,7 @@
 	tags-loop-operate `(perform-replace ',from ',to t t ',delimited))
   (tags-loop-continue (or file-list-form t)))
 
-(defun tags-complete-tags-table-file (string predicate what)
+(defun tags-complete-tags-table-file (string predicate what) ; Doc string?
   (save-excursion
     ;; If we need to ask for the tag table, allow that.
     (let ((enable-recursive-minibuffers t))
@@ -1966,7 +2003,7 @@
   (set-buffer-modified-p nil)
   (select-tags-table-mode))
 
-(defvar select-tags-table-mode-map
+(defvar select-tags-table-mode-map ; Doc string?
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map button-buffer-map)
     (define-key map "t" 'push-button)