branch: elpa/sweeprolog
commit 0a58409a4c5404ee349654fde66dd7742a4f4e73
Author: Eshel Yaron <[email protected]>
Commit: Eshel Yaron <[email protected]>

    Fix docs for predicate at point in DCG bodies
    
    * sweep.pl (sweep_short_documentation_body/9): Add special handling
    for control constructs in DCG bodies.
    * sweeprolog-tests.el (eldoc-dcg): New test.
---
 sweep.pl            |  8 ++++++++
 sweeprolog-tests.el | 33 ++++++++++++++++++++++++++-------
 2 files changed, 34 insertions(+), 7 deletions(-)

diff --git a/sweep.pl b/sweep.pl
index 21fb0f6449..cb99ee6392 100644
--- a/sweep.pl
+++ b/sweep.pl
@@ -375,6 +375,14 @@ sweep_short_documentation_body(Pos, Body, Neck, Point, 
FileName, Mod, PIString,
     Neck > 0,
     !,
     sweep_short_documentation_body(Pos, Body, 0, Point, FileName, Mod, 
PIString, Doc, ArgSpan).
+sweep_short_documentation_body(term_position(_, _, _, _, ArgsPos), Body, '//', 
Point, FileName, Mod, PIString, Doc, ArgSpan) :-
+    is_control_goal(Body),
+    !,
+    nth1(Index, ArgsPos, ArgPos),
+    pos_bounds(ArgPos, ArgBeg, ArgEnd),
+    ArgBeg =< Point, Point =< ArgEnd,
+    arg(Index, Body, ArgBody),
+    sweep_short_documentation_body(ArgPos, ArgBody, '//', Point, FileName, 
Mod, PIString, Doc, ArgSpan).
 sweep_short_documentation_body(term_position(_, _, _, _, ArgsPos), Body, Neck, 
Point, FileName, Mod, PIString, Doc, ArgSpan) :-
     !,
     (   nth1(Index, ArgsPos, ArgPos),
diff --git a/sweeprolog-tests.el b/sweeprolog-tests.el
index 595b89e030..5c57520ab3 100644
--- a/sweeprolog-tests.el
+++ b/sweeprolog-tests.el
@@ -2254,8 +2254,8 @@ bbb(A, B) :-
 ")))
 
 (sweeprolog-deftest extract-region-to-predicate-ext-1 ()
-                    "Test `sweeprolog-extract-region-to-predicate'."
-                    "
+  "Test `sweeprolog-extract-region-to-predicate'."
+  "
 :- module(bbb, []).
 
 bar(A, Y) :-
@@ -2316,17 +2316,17 @@ bbb(VarName) :-
 ")))
 
 (sweeprolog-deftest extract-region-to-predicate-lambda-2 ()
-                    "Test `sweeprolog-extract-region-to-predicate'."
-                    "
+  "Test `sweeprolog-extract-region-to-predicate'."
+  "
 :- module(bbb, []).
 
 bar(A, Y) :-
     maplist({GoalVarNames}/[VarName]>>ignore(memberchk(VarName, GoalVarNames)),
             TemplateVarNames).
 "
-                    (sweeprolog-extract-region-to-predicate 48 114 "bbb")
-                    (should (string= (buffer-string)
-                                     "
+  (sweeprolog-extract-region-to-predicate 48 114 "bbb")
+  (should (string= (buffer-string)
+                   "
 :- module(bbb, []).
 
 bar(A, Y) :-
@@ -2336,4 +2336,23 @@ bar(A, Y) :-
 bbb(GoalVarNames, VarName) :-
     ignore(memberchk(VarName, GoalVarNames)).
 ")))
+
+(sweeprolog-deftest eldoc-dcg ()
+  "Test `sweep_short_documentation/2' with DCG body terms."
+  "
+:- module(eldocdcg, []).
+
+%!  foo(-Baz:string)// is det.
+%
+%   Doit.
+
+foo(Bar) --> baz(Bar).
+"
+  (should (equal (sweeprolog--query-once
+                  "sweep" "sweep_short_documentation"
+                  (list "bar --> foo(bar), foo(baz)." 12 (buffer-file-name)))
+                 (list "eldocdcg:foo//1" "foo(-Baz:string)// is det.
+    Doit.
+" (cons 4 15)))))
+
 ;;; sweeprolog-tests.el ends here

Reply via email to