Skip to content

Commit

Permalink
review
Browse files Browse the repository at this point in the history
  • Loading branch information
liuxingbaoyu committed Jun 16, 2022
1 parent 6e71c09 commit 9c14b21
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 21 deletions.
40 changes: 29 additions & 11 deletions parser.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,17 +99,35 @@ export type CharacterClass<F extends Features = {}> = Base<"characterClass"> & {
kind: "union" | _If<F["unicodeSet"], "intersection" | "subtraction", never>;
};

export type NonCapturingGroup<F extends Features = {}> = Base<"group"> & {
behavior:
| "ignore"
| "lookahead"
| "lookbehind"
| "negativeLookahead"
| "negativeLookbehind";
body: RootNode<F>[];
enablingFlags?: string;
disablingFlags?: string;
};
export type ModifierFlags = {
enabling: string,
disabling: string
}

export type NonCapturingGroup<F extends Features = {}> = Base<"group"> &
(
| {
behavior:
| "lookahead"
| "lookbehind"
| "negativeLookahead"
| "negativeLookbehind";
body: RootNode<F>[];
}
| ({
behavior: "ignore";
body: RootNode<F>[];
} & _If<
F["modifiers"],
{
modifierFlags?: ModifierFlags;
},
{
modifierFlags: undefined;
}
>)
);


export type CapturingGroup<F extends Features = {}> = Base<"group"> & {
behavior: "normal";
Expand Down
8 changes: 5 additions & 3 deletions parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -817,14 +817,16 @@
disablingFlags = disablingFlags ? disablingFlags[0] : "";

var flags = enablingFlags + disablingFlags;
if(flags.length > 3 || hasDupChar(flags)){
if(flags.length > 3 || hasDupChar(flags)) {
bail('flags cannot be duplicated for modifiers group');
}

var modifiersGroup = finishGroup("ignore", from);

modifiersGroup.enablingFlags = enablingFlags;
modifiersGroup.disablingFlags = disablingFlags;
modifiersGroup.modifierFlags = {
enabling: enablingFlags,
disabling: disablingFlags
};

return modifiersGroup;
}
Expand Down
18 changes: 12 additions & 6 deletions test/test-data-modifiers-group.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,8 +111,10 @@
17
],
"raw": "(?-i:[a-z])",
"enablingFlags": "",
"disablingFlags": "i"
"modifierFlags": {
"enabling": "",
"disabling": "i"
}
},
{
"type": "anchor",
Expand Down Expand Up @@ -202,8 +204,10 @@
11
],
"raw": "(?i:[a-z])",
"enablingFlags": "i",
"disablingFlags": ""
"modifierFlags": {
"enabling": "i",
"disabling": ""
}
},
{
"type": "characterClass",
Expand Down Expand Up @@ -333,8 +337,10 @@
13
],
"raw": "(?i-s:[a-z])",
"enablingFlags": "i",
"disablingFlags": "s"
"modifierFlags": {
"enabling": "i",
"disabling": "s"
}
},
{
"type": "characterClass",
Expand Down
14 changes: 13 additions & 1 deletion test/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AstNodeType, Identifier, parse, RootNode } from "../parser";
import { AstNodeType, Identifier, ModifierFlags, parse, RootNode } from "../parser";

function assert<T>(input: T): void {}

Expand Down Expand Up @@ -88,3 +88,15 @@ if (nodeWithUnicodeSet.type === "characterClass") {
nodeWithUnicodeSet.kind === "subtraction";
assert<"union" | "intersection" | "subtraction">(nodeWithUnicodeSet.kind);
}

let nodeWithModifiers: RootNode<{ modifiers: true }>;
nodeWithModifiers = parse("", "", {
modifiers: true,
});

if (
nodeWithModifiers.type === "group" &&
nodeWithModifiers.behavior === "ignore"
) {
assert<ModifierFlags | undefined>(nodeWithModifiers.modifierFlags);
}

0 comments on commit 9c14b21

Please sign in to comment.