Function: idlwave-attach-classes

idlwave-attach-classes is a byte-compiled function defined in idlwave.el.gz.

Signature

(idlwave-attach-classes LIST TYPE SHOW-CLASSES)

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/idlwave.el.gz
(defun idlwave-attach-classes (list type show-classes)
  ;; Attach the proper class list to a LIST of completion items.
  ;; TYPE, when 'kwd, shows classes for method keywords, when
  ;; 'class-tag, for class tags, and otherwise for methods.
  ;; SHOW-CLASSES is the value of `idlwave-completion-show-classes'.
  (if (or (null show-classes)           ; don't want to see classes
	  (null idlwave--class-selector)         ; not a method call
	  (and
	   (stringp idlwave--class-selector) ; the class is already known
	   (not idlwave--super-classes)))    ; no possibilities for inheritance
      ;; In these cases, we do not have to do anything
      list
    (let* ((do-prop (>= show-classes 0))
	   (do-buf (not (= show-classes 0)))
	   ;; (do-dots t)
	   (inherit (if (and (not (eq type 'class-tag)) idlwave--super-classes)
			(cons idlwave--class-selector idlwave--super-classes)))
	   (max (abs show-classes))
	   (lmax ;; (if do-dots
                     (apply #'max (mapcar #'length list))) ;;)
	  classes nclasses class-info space)
      (mapcar
       (lambda (x)
	 ;; get the classes
	 (if (eq type 'class-tag)
	     ;; Just one class for tags
	     (setq classes
		   (list
		    (idlwave-class-or-superclass-with-tag
		     idlwave--class-selector x)))
	   ;; Multiple classes for method or method-keyword
	   (setq classes
		 (if (eq type 'kwd)
		     (idlwave-all-method-keyword-classes
		      idlwave--method-selector x idlwave--type-selector)
		   (idlwave-all-method-classes x idlwave--type-selector)))
	   (if inherit
	       (setq classes
		     (delq nil
			   (mapcar (lambda (x) (if (memq x inherit) x nil))
				   classes)))))
	 (setq nclasses (length classes))
	 ;; Make the separator between item and class-info
	 ;; (if do-dots
	 (setq space (concat " " (make-string (- lmax (length x)) ?.)))
	 ;; (setq space " "))
	 (if  do-buf
	     ;; We do want info in the buffer
	     (if (<= nclasses max)
		 (setq class-info (concat
				   space
				   "<" (mapconcat #'identity classes ",") ">"))
	       (setq class-info (format "%s<%d classes>" space nclasses)))
	   (setq class-info nil))
	 (when do-prop
	   ;; We do want properties
	   (setq x (copy-sequence x))
	   (put-text-property 0 (length x)
                              'help-echo (mapconcat #'identity classes " ")
                              x))
	 (if class-info
	     (list x class-info)
	   x))
       list))))