From d715ae8788e16b22f7f68cb82b51a40ad95c78c2 Mon Sep 17 00:00:00 2001
From: Lars Ingebrigtsen <larsi@gnus.org>
Date: Tue, 18 Jun 2019 15:56:18 +0200
Subject: [PATCH] Add a mechanism to specify expected shift/reduce .wy
 conflicts

* admin/grammars/python.wy: Set the expected number of
shift/reduce conflicts to four.

* lisp/cedet/semantic/grammar.el
(semantic-grammar-expected-conflicts): New function.
* lisp/cedet/semantic/wisent/comp.el (wisent-total-conflicts): Use
it to suppress warnings about the expected number of shift/reduce
conflicts.
---
 admin/grammars/python.wy           |  1 +
 lisp/cedet/semantic/grammar.el     |  9 ++++++++-
 lisp/cedet/semantic/wisent/comp.el | 16 +++++++++-------
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/admin/grammars/python.wy b/admin/grammars/python.wy
index 082850df59c..0e926ad3636 100644
--- a/admin/grammars/python.wy
+++ b/admin/grammars/python.wy
@@ -88,6 +88,7 @@
 
 %package wisent-python-wy
 %provide semantic/wisent/python-wy
+%expectedconflicts 4
 
 %{
 (declare-function wisent-python-reconstitute-function-tag
diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el
index 8ffa4c6d83e..39161420f98 100644
--- a/lisp/cedet/semantic/grammar.el
+++ b/lisp/cedet/semantic/grammar.el
@@ -277,6 +277,13 @@ foo.by it is foo-by."
              (i    (string-match (format "\\([.]\\)%s\\'" ext) file)))
         (concat (substring file 0 i) "-" ext))))
 
+(defun semantic-grammar-expected-conflicts ()
+  "Return the number of expected shift/reduce conflicts in the package."
+  (let ((conflicts (semantic-grammar-tag-symbols 'expectedconflicts)))
+    (if conflicts
+        (string-to-number conflicts)
+      0)))
+
 (defsubst semantic-grammar-languagemode ()
   "Return the %languagemode value as a list of symbols or nil."
   (semantic-grammar-tag-symbols 'languagemode))
@@ -987,7 +994,7 @@ Return non-nil if there were no errors, nil if errors."
 		       (vc-handled-backends nil))
 		   (setq semanticdb-new-database-class 'semanticdb-project-database)
 		   (semantic-mode 1)
-		   (semantic-grammar-create-package)))
+		   (semantic-grammar-create-package t)))
              (error
               (message "%s" (error-message-string err))
               nil))))
diff --git a/lisp/cedet/semantic/wisent/comp.el b/lisp/cedet/semantic/wisent/comp.el
index 051b898ed78..733345f593f 100644
--- a/lisp/cedet/semantic/wisent/comp.el
+++ b/lisp/cedet/semantic/wisent/comp.el
@@ -40,6 +40,7 @@
 
 ;;; Code:
 (require 'semantic/wisent)
+(require 'semantic/grammar)
 (eval-when-compile (require 'cl-lib))
 
 ;;;; -------------------
@@ -2272,16 +2273,17 @@ there are any reduce/reduce conflicts."
     (let* ((src (wisent-source))
            (src (if src (concat " in " src) ""))
            (msg (format "Grammar%s contains" src)))
-      (if (> src-total 0)
-          (setq msg (format "%s %d shift/reduce conflict%s"
-                            msg src-total (if (> src-total 1)
-                                              "s" ""))))
+      (when (and (> src-total 0)
+                 (not (= rrc-total (semantic-grammar-expected-conflicts))))
+        (setq msg (format "%s %d shift/reduce conflict%s"
+                          msg src-total (if (> src-total 1)
+                                            "s" ""))))
       (if (and (> src-total 0) (> rrc-total 0))
           (setq msg (format "%s and" msg)))
       (if (> rrc-total 0)
-        (setq msg (format "%s %d reduce/reduce conflict%s"
-                          msg rrc-total (if (> rrc-total 1)
-                                            "s" ""))))
+          (setq msg (format "%s %d reduce/reduce conflict%s"
+                            msg rrc-total (if (> rrc-total 1)
+                                              "s" ""))))
       (message msg))))
 
 (defun wisent-print-conflicts ()