emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 2155973: python.el: Keep eldoc visible while typing


From: Fabián Ezequiel Gallina
Subject: [Emacs-diffs] master 2155973: python.el: Keep eldoc visible while typing args.
Date: Sat, 07 Feb 2015 21:39:19 +0000

branch: master
commit 2155973e5e35d11a50ce6773bb34d5df68beea57
Author: Fabián Ezequiel Gallina <address@hidden>
Commit: Fabián Ezequiel Gallina <address@hidden>

    python.el: Keep eldoc visible while typing args.
    
    Fixes: debbugs:19637
    
    * lisp/progmodes/python.el (python-eldoc--get-symbol-at-point): New
    function.
    (python-eldoc--get-doc-at-point, python-eldoc-at-point): Use it.
    
    * test/automated/python-tests.el
    (python-eldoc--get-symbol-at-point-1)
    (python-eldoc--get-symbol-at-point-2)
    (python-eldoc--get-symbol-at-point-3)
    (python-eldoc--get-symbol-at-point-4): New tests.
---
 lisp/ChangeLog                 |    8 +++++
 lisp/progmodes/python.el       |   20 ++++++++++++--
 test/ChangeLog                 |    8 +++++
 test/automated/python-tests.el |   57 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 90 insertions(+), 3 deletions(-)

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 655ae57..34d4013 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,13 @@
 2015-02-07  Fabián Ezequiel Gallina  <address@hidden>
 
+       python.el: Keep eldoc visible while typing args.  (Bug#19637)
+
+       * progmodes/python.el (python-eldoc--get-symbol-at-point): New
+       function.
+       (python-eldoc--get-doc-at-point, python-eldoc-at-point): Use it.
+
+2015-02-07  Fabián Ezequiel Gallina  <address@hidden>
+
        Fix hideshow integration.  (Bug#19761)
 
        * progmodes/python.el
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 3399429..72a76a4 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -3921,15 +3921,29 @@ See `python-check-command' for the default."
   :type 'string
   :group 'python)
 
+(defun python-eldoc--get-symbol-at-point ()
+  "Get the current symbol for eldoc.
+Returns the current symbol handling point within arguments."
+  (save-excursion
+    (let ((start (python-syntax-context 'paren)))
+      (when start
+        (goto-char start))
+      (when (or start
+                (eobp)
+                (memq (char-syntax (char-after)) '(?\ ?-)))
+        ;; Try to adjust to closest symbol if not in one.
+        (python-util-forward-comment -1)))
+    (python-info-current-symbol t)))
+
 (defun python-eldoc--get-doc-at-point (&optional force-input force-process)
   "Internal implementation to get documentation at point.
-If not FORCE-INPUT is passed then what `python-info-current-symbol'
+If not FORCE-INPUT is passed then what `python-eldoc--get-symbol-at-point'
 returns will be used.  If not FORCE-PROCESS is passed what
 `python-shell-get-process' returns is used."
   (let ((process (or force-process (python-shell-get-process))))
     (when process
       (let ((input (or force-input
-                       (python-info-current-symbol t))))
+                       (python-eldoc--get-symbol-at-point))))
         (and input
              ;; Prevent resizing the echo area when iPython is
              ;; enabled.  Bug#18794.
@@ -3949,7 +3963,7 @@ inferior Python process is updated properly."
   "Get help on SYMBOL using `help'.
 Interactively, prompt for symbol."
   (interactive
-   (let ((symbol (python-info-current-symbol t))
+   (let ((symbol (python-eldoc--get-symbol-at-point))
          (enable-recursive-minibuffers t))
      (list (read-string (if symbol
                             (format "Describe symbol (default %s): " symbol)
diff --git a/test/ChangeLog b/test/ChangeLog
index b1e2151..ff02bd6 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,6 +1,14 @@
 2015-02-07  Fabián Ezequiel Gallina  <address@hidden>
 
        * automated/python-tests.el
+       (python-eldoc--get-symbol-at-point-1)
+       (python-eldoc--get-symbol-at-point-2)
+       (python-eldoc--get-symbol-at-point-3)
+       (python-eldoc--get-symbol-at-point-4): New tests.
+
+2015-02-07  Fabián Ezequiel Gallina  <address@hidden>
+
+       * automated/python-tests.el
        (python-tests-visible-string): New function.
        (python-parens-electric-indent-1)
        (python-triple-quote-pairing): Fix indentation, move require calls.
diff --git a/test/automated/python-tests.el b/test/automated/python-tests.el
index e5fcda9..47e2a6e 100644
--- a/test/automated/python-tests.el
+++ b/test/automated/python-tests.el
@@ -2943,6 +2943,63 @@ class Foo(models.Model):
 
 ;;; Eldoc
 
+(ert-deftest python-eldoc--get-symbol-at-point-1 ()
+  "Test paren handling."
+  (python-tests-with-temp-buffer
+   "
+map(xx
+map(codecs.open('somefile'
+"
+   (python-tests-look-at "ap(xx")
+   (should (string= (python-eldoc--get-symbol-at-point) "map"))
+   (goto-char (line-end-position))
+   (should (string= (python-eldoc--get-symbol-at-point) "map"))
+   (python-tests-look-at "('somefile'")
+   (should (string= (python-eldoc--get-symbol-at-point) "map"))
+   (goto-char (line-end-position))
+   (should (string= (python-eldoc--get-symbol-at-point) "codecs.open"))))
+
+(ert-deftest python-eldoc--get-symbol-at-point-2 ()
+  "Ensure self is replaced with the class name."
+  (python-tests-with-temp-buffer
+   "
+class TheClass:
+
+    def some_method(self, n):
+        return n
+
+    def other(self):
+        return self.some_method(1234)
+
+"
+   (python-tests-look-at "self.some_method")
+   (should (string= (python-eldoc--get-symbol-at-point)
+                    "TheClass.some_method"))
+   (python-tests-look-at "1234)")
+   (should (string= (python-eldoc--get-symbol-at-point)
+                    "TheClass.some_method"))))
+
+(ert-deftest python-eldoc--get-symbol-at-point-3 ()
+  "Ensure symbol is found when point is at end of buffer."
+  (python-tests-with-temp-buffer
+   "
+some_symbol
+
+"
+   (goto-char (point-max))
+   (should (string= (python-eldoc--get-symbol-at-point)
+                    "some_symbol"))))
+
+(ert-deftest python-eldoc--get-symbol-at-point-4 ()
+  "Ensure symbol is found when point is at whitespace."
+  (python-tests-with-temp-buffer
+   "
+some_symbol   some_other_symbol
+"
+   (python-tests-look-at "  some_other_symbol")
+   (should (string= (python-eldoc--get-symbol-at-point)
+                    "some_symbol"))))
+
 
 ;;; Imenu
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]