SORT VARIABLES: Improve error messages.
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 11 Nov 2022 05:50:26 +0000 (21:50 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 11 Nov 2022 05:50:26 +0000 (21:50 -0800)
src/language/dictionary/sort-variables.c
tests/language/dictionary/sort-variables.at

index aee341bda61770f633964c1ab493960c0366ed4a..d30629feb0b7aa8c47837d5a5794e8c153405e91 100644 (file)
@@ -240,6 +240,13 @@ cmd_sort_variables (struct lexer *lexer, struct dataset *ds)
       c.attr_name = xstrdup (lex_tokcstr (lexer));
       lex_get (lexer);
     }
+  else
+    {
+      lex_error_expecting (lexer, "NAME", "TYPE", "FORMAT", "LABEL",
+                           "VALUES", "MISSING", "MEASURE", "ROLE",
+                           "COLUMNS", "ALIGNMENT", "ATTRIBUTE");
+      return CMD_FAILURE;
+    }
 
   /* Parse sort direction. */
   if (lex_match (lexer, T_LPAREN))
@@ -250,7 +257,7 @@ cmd_sort_variables (struct lexer *lexer, struct dataset *ds)
         c.descending = true;
       else
         {
-          lex_error (lexer, NULL);
+          lex_error_expecting (lexer, "A", "D");
           goto exit;
         }
       if (!lex_force_match (lexer, T_RPAREN))
index 896833d23ebfb83cbb880aa3569abbdb8b7c4572..8d012576bfe3eb75100bee3a901993464bd74188 100644 (file)
@@ -76,3 +76,30 @@ test_sort 'az ax ay ab' \
      VARIABLE ATTRIBUTE VARIABLES=ab ATTRIBUTE=key("b").' \
     'ATTRIBUTE key' 'ab ax ay az'
 AT_CLEANUP
+
+AT_SETUP([SORT VARIABLES syntax errors])
+AT_DATA([sort-variables.sps], [dnl
+DATA LIST LIST NOTABLE /x y z.
+SORT VARIABLES BY **.
+SORT VARIABLES BY ATTRIBUTE **.
+SORT VARIABLES BY NAME (**).
+SORT VARIABLES BY NAME (A **).
+])
+AT_CHECK([pspp -O format=csv sort-variables.sps], [1], [dnl
+"sort-variables.sps:2.19-2.20: error: SORT VARIABLES: Syntax error expecting one of the following: NAME, TYPE, FORMAT, LABEL, VALUES, MISSING, MEASURE, ROLE, COLUMNS, ALIGNMENT, ATTRIBUTE.
+    2 | SORT VARIABLES BY **.
+      |                   ^~"
+
+"sort-variables.sps:3.29-3.30: error: SORT VARIABLES: Syntax error expecting identifier.
+    3 | SORT VARIABLES BY ATTRIBUTE **.
+      |                             ^~"
+
+"sort-variables.sps:4.25-4.26: error: SORT VARIABLES: Syntax error expecting A or D.
+    4 | SORT VARIABLES BY NAME (**).
+      |                         ^~"
+
+"sort-variables.sps:5.27-5.28: error: SORT VARIABLES: Syntax error expecting `)'.
+    5 | SORT VARIABLES BY NAME (A **).
+      |                           ^~"
+])
+AT_CLEANUP