Fix stray space after named end breaking parsing #8976 (#9073)

This commit fixes #8976, and adds tests for procedures, functions,
and macro definitions with spaces after the end statements, both
with and without names.
This commit is contained in:
Jason E Baldus
2025-05-29 03:08:53 -04:00
committed by GitHub
parent da4f5c64ca
commit 48b45f0e35
3 changed files with 50 additions and 2 deletions

View File

@@ -116,6 +116,22 @@ describe("WikiText parser tests", function() {
);
});
it("should parse macro definitions with end statements followed by spaces", function() {
expect(parse("\\define myMacro()\nnothing\n\\end \n")).toEqual(
[{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"start":0,"end":33,"rule":"macrodef"}]
);
});
it("should parse macro definitions with named end statements followed by spaces", function() {
expect(parse("\\define myMacro()\nnothing\n\\end myMacro \n")).toEqual(
[{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"isMacroDefinition":true,"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"start":0,"end":40,"rule":"macrodef"}]
);
});
it("should parse procedure definitions with no parameters", function() {
expect(parse("\\procedure myMacro()\nnothing\n\\end\n")).toEqual(
@@ -132,6 +148,22 @@ describe("WikiText parser tests", function() {
);
});
it("should parse procedure definitions with end statements followed by spaces", function() {
expect(parse("\\procedure myMacro()\nnothing\n\\end \n")).toEqual(
[{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isProcedureDefinition":true,"start":0,"end":36,"rule":"fnprocdef"}]
);
});
it("should parse procedure definitions with named end statements followed by spaces", function() {
expect(parse("\\procedure myMacro()\nnothing\n\\end myMacro \n")).toEqual(
[{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isProcedureDefinition":true,"start":0,"end":43,"rule":"fnprocdef"}]
);
});
it("should parse procedure definitions with parameters", function() {
expect(parse("\\procedure myMacro(one,two,three,four:elephant)\nnothing\n\\end\n")).toEqual(
@@ -155,6 +187,22 @@ describe("WikiText parser tests", function() {
);
});
it("should parse function definitions with end statements followed by spaces", function() {
expect(parse("\\function myMacro()\nnothing\n\\end \n")).toEqual(
[{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isFunctionDefinition":true,"start":0,"end":35,"rule":"fnprocdef"}]
);
});
it("should parse function definitions with named end statements followed by spaces", function() {
expect(parse("\\function myMacro()\nnothing\n\\end myMacro \n")).toEqual(
[{"type":"set","attributes":{"name":{"name":"name","type":"string","value":"myMacro"},"value":{"name":"value","type":"string","value":"nothing"}},"children":[],"params":[],"orderedAttributes":[{"name":"name","type":"string","value":"myMacro"},{"name":"value","type":"string","value":"nothing"}],"isFunctionDefinition":true,"start":0,"end":42,"rule":"fnprocdef"}]
);
});
it("should parse single line function definitions with no parameters", function() {
expect(parse("\\function myMacro() nothing\n")).toEqual(