Changeset 15619


Ignore:
Timestamp:
Jan 28, 2013, 10:03:04 PM (6 years ago)
Author:
gfoy
Message:

Improved parse-symbol.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/cocoa-ide-contrib/foy/hemlock-commands-cm/hemlock-commands-new.lisp

    r15605 r15619  
    1313;;;
    1414;;;      Mod History, most recent first:
    15 ;;;      1/24/13 Workaround for Show Documentation.
     15;;;      1/28/13 Improved parse-symbol.
    1616;;;      9/2/9   Added "Show Callers" command.
    1717;;;      8/31/9  version 0.1b1
     
    3333                    (mark2 point))
    3434      (hemlock::mark-symbol mark1 mark2)
    35       ;; For an objc method, mark-symbol removes the prepended #\#
     35      ;; NOTE: mark-symbol no longer removes the #\# in 1.9 trunk
    3636      (let* ((string (hi::region-to-string (hi::region mark1 mark2)))
    37              (objc-p (when string (char= (elt string 0) #\/)))
     37             (objc-p (when string (char= (elt string 0) #\#)))
    3838             (colons-start-position (when string
    3939                                      (unless objc-p (position #\: string))))
     
    4949             (package (if objc-p
    5050                        (find-package "NEXTSTEP-FUNCTIONS")
    51                         (when package-prefix (find-package package-prefix))))
     51                        (if package-prefix
     52                          (find-package package-prefix)
     53                          (hemlock::buffer-package hi::*current-buffer*))))                         
    5254             symbol)
    5355        (when (and sym-string objc-p)
    54           (setq sym-string (subseq sym-string 1))) ;chuck the #\/
    55         (setq symbol (if package
     56          (setq sym-string (subseq sym-string 2))) ;chuck the #/
     57        (setq symbol (when package
    5658                       (if objc-p
    5759                         (find-symbol sym-string package)
    58                          (find-symbol (string-upcase sym-string) package))
    59                        (find-symbol (string-upcase sym-string) (hemlock::buffer-package hi::*current-buffer*))))
    60         symbol))))
     60                         (find-symbol (string-upcase sym-string) package))))
     61        (values symbol package)))))
    6162
    6263(defCommand "Inspect Symbol" (p)
    6364  "Open the Inspector for the symbol at point."
    6465  (declare (ignore p))
    65   (let ((symbol (parse-symbol)))
    66     (cond (symbol
    67            (inspect symbol))
    68           (t
    69            (hi::editor-error "Could not parse a valid symbol at point.")))))
     66  (multiple-value-bind (symbol package)
     67                       (parse-symbol)
     68    (if symbol
     69      (inspect symbol)
     70      (if package
     71        (hi::editor-error "Could not parse an interned symbol at point.")
     72        (hi::editor-error "The file's package is not defined.")))))
    7073
    7174(hi::bind-key "Inspect Symbol" #k"control-x control-i")
     
    128131  "Display the documentation for the symbol at point."
    129132  (declare (ignore p))
    130   (let* ((sym (parse-symbol))
    131          (hemlock-view (hi::current-view))
    132          (pane (when hemlock-view (hi::hemlock-view-pane hemlock-view)))
    133          (text-view (when pane (gui::text-pane-text-view pane))))
     133  (multiple-value-bind (sym package)
     134                       (parse-symbol)
     135    (let* ((hemlock-view (hi::current-view))
     136           (pane (when hemlock-view (hi::hemlock-view-pane hemlock-view)))
     137           (text-view (when pane (gui::text-pane-text-view pane))))
    134138      (cond ((and sym text-view)
    135139             (cond ((eq (symbol-package sym) (find-package :common-lisp))
     
    142146                         (format nil "No documentation found for ~S" sym) nil nil)))))
    143147            (t
    144              (hi::editor-error "Could not parse a valid symbol at point.")))))
     148             (if package
     149               (hi::editor-error "Could not parse an interned symbol at point.")
     150               (hi::editor-error "The file's package is not defined.")))))))
    145151
    146152(hi::bind-key "Symbol Documentation" #k"control-x control-d")
     
    148154(defCommand "Show Callers" (p)
    149155  "Display a scrolling list of the callers of the symbol at point.
    150    Double-click a row to go to the caller's definition."
     156  Double-click a row to go to the caller's definition."
    151157  (declare (ignore p))
    152   (let* ((symbol (parse-symbol))
    153          (callers (ccl::callers symbol)))
    154     (cond (symbol
    155            (if callers
    156              (make-instance 'gui::sequence-window-controller
    157                :title (format nil "Callers of ~a" symbol)
    158                :sequence (mapcar #'(lambda (entry)
    159                                      (if (listp entry)
    160                                        (car (last entry))
    161                                        entry))
    162                                  (ccl::callers symbol))
    163                :result-callback #'hemlock::edit-definition
    164                :display #'princ)
    165              (gui::alert-window :title "Notification"
    166                                 :message (format nil "Could not find any callers for ~S" symbol))))
    167           (t
    168            (hi::editor-error "Could not parse a valid symbol at point.")))))
     158  (multiple-value-bind (symbol package)
     159                       (parse-symbol)
     160    (let ((callers (when symbol (ccl::callers symbol))))
     161      (cond (symbol
     162             (if callers
     163               (make-instance 'gui::sequence-window-controller
     164                 :title (format nil "Callers of ~a" symbol)
     165                 :sequence (mapcar #'(lambda (entry)
     166                                       (if (listp entry)
     167                                         (car (last entry))
     168                                         entry))
     169                                   (ccl::callers symbol))
     170                 :result-callback #'hemlock::edit-definition
     171                 :display #'princ)
     172               (gui::alert-window :title "Notification"
     173                                  :message (format nil "Could not find any callers for ~S" symbol))))
     174            (t
     175             (if package
     176               (hi::editor-error "Could not parse an interned symbol at point.")
     177               (hi::editor-error "The file's package is not defined.")))))))
    169178
    170179(hi::bind-key "Show Callers" #k"control-meta-c")
Note: See TracChangeset for help on using the changeset viewer.