Skip to content

Commit

Permalink
Convert up to 11 function arguments for hack.FileCall
Browse files Browse the repository at this point in the history
Summary:
FileCall arguments must be translated from indexer-/language-specific
predicates to codemarkup.FileCall.  Sadly, this means rigid pattern
matches of the argument list, so we lose FileCalls if they have too
many arguments.  This recently happened for a set of calls our partner
teams care deeply about.

Python arg translation goes up to 11, so I've adjusted Hack to match.

I had hoped to make the last clause something like "11 or more" using
pepeiborra's [A,B,C,..] match notation, but it was not to be -
something in the translation or the underlying query engine really
doesn't like this, and the resulting clauses only match if I add a
second array match clause of the right length in just the right place.

Reviewed By: phlalx

Differential Revision: D63483508

fbshipit-source-id: 8ed84f53239f3ef3e359b1220c69556b864a64cc
  • Loading branch information
Jan-Willem Maessen authored and facebook-github-bot committed Sep 26, 2024
1 parent 17396e5 commit 997368e
Showing 1 changed file with 220 additions and 0 deletions.
220 changes: 220 additions & 0 deletions glean/schema/source/codemarkup.hack.angle
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,226 @@ predicate ConvertCallArguments :
code.CallArgument{nothing, Span5, CodeArgument5},
code.CallArgument{nothing, Span6, CodeArgument6}
]
) |
(
[
hack.CallArgument{Span_rel, Argument},
hack.CallArgument{Span2_rel, Argument2},
hack.CallArgument{Span3_rel, Argument3},
hack.CallArgument{Span4_rel, Argument4},
hack.CallArgument{Span5_rel, Argument5},
hack.CallArgument{Span6_rel, Argument6},
hack.CallArgument{Span7_rel, Argument7}
] = HackArgs;
[Span, Span2, Span3, Span4, Span5, Span6, Span7] = prim.relToAbsByteSpans
[ Span_rel,
Span2_rel,
Span3_rel,
Span4_rel,
Span5_rel,
Span6_rel,
Span7_rel
];
ConvertArgument{Argument, CodeArgument};
ConvertArgument{Argument2, CodeArgument2};
ConvertArgument{Argument3, CodeArgument3};
ConvertArgument{Argument4, CodeArgument4};
ConvertArgument{Argument5, CodeArgument5};
ConvertArgument{Argument6, CodeArgument6};
ConvertArgument{Argument7, CodeArgument7};
CodeArgs = [
code.CallArgument{nothing, Span, CodeArgument},
code.CallArgument{nothing, Span2, CodeArgument2},
code.CallArgument{nothing, Span3, CodeArgument3},
code.CallArgument{nothing, Span4, CodeArgument4},
code.CallArgument{nothing, Span5, CodeArgument5},
code.CallArgument{nothing, Span6, CodeArgument6},
code.CallArgument{nothing, Span7, CodeArgument7}
]
) |
(
[
hack.CallArgument{Span_rel, Argument},
hack.CallArgument{Span2_rel, Argument2},
hack.CallArgument{Span3_rel, Argument3},
hack.CallArgument{Span4_rel, Argument4},
hack.CallArgument{Span5_rel, Argument5},
hack.CallArgument{Span6_rel, Argument6},
hack.CallArgument{Span7_rel, Argument7},
hack.CallArgument{Span8_rel, Argument8}
] = HackArgs;
[Span, Span2, Span3, Span4, Span5, Span6, Span7, Span8] = prim.relToAbsByteSpans
[ Span_rel,
Span2_rel,
Span3_rel,
Span4_rel,
Span5_rel,
Span6_rel,
Span7_rel,
Span8_rel
];
ConvertArgument{Argument, CodeArgument};
ConvertArgument{Argument2, CodeArgument2};
ConvertArgument{Argument3, CodeArgument3};
ConvertArgument{Argument4, CodeArgument4};
ConvertArgument{Argument5, CodeArgument5};
ConvertArgument{Argument6, CodeArgument6};
ConvertArgument{Argument7, CodeArgument7};
ConvertArgument{Argument8, CodeArgument8};
CodeArgs = [
code.CallArgument{nothing, Span, CodeArgument},
code.CallArgument{nothing, Span2, CodeArgument2},
code.CallArgument{nothing, Span3, CodeArgument3},
code.CallArgument{nothing, Span4, CodeArgument4},
code.CallArgument{nothing, Span5, CodeArgument5},
code.CallArgument{nothing, Span6, CodeArgument6},
code.CallArgument{nothing, Span7, CodeArgument7},
code.CallArgument{nothing, Span8, CodeArgument8}
]
) |
(
[
hack.CallArgument{Span_rel, Argument},
hack.CallArgument{Span2_rel, Argument2},
hack.CallArgument{Span3_rel, Argument3},
hack.CallArgument{Span4_rel, Argument4},
hack.CallArgument{Span5_rel, Argument5},
hack.CallArgument{Span6_rel, Argument6},
hack.CallArgument{Span7_rel, Argument7},
hack.CallArgument{Span8_rel, Argument8},
hack.CallArgument{Span9_rel, Argument9}
] = HackArgs;
[Span, Span2, Span3, Span4, Span5, Span6, Span7, Span8, Span9] = prim.relToAbsByteSpans
[ Span_rel,
Span2_rel,
Span3_rel,
Span4_rel,
Span5_rel,
Span6_rel,
Span7_rel,
Span8_rel,
Span9_rel
];
ConvertArgument{Argument, CodeArgument};
ConvertArgument{Argument2, CodeArgument2};
ConvertArgument{Argument3, CodeArgument3};
ConvertArgument{Argument4, CodeArgument4};
ConvertArgument{Argument5, CodeArgument5};
ConvertArgument{Argument6, CodeArgument6};
ConvertArgument{Argument7, CodeArgument7};
ConvertArgument{Argument8, CodeArgument8};
ConvertArgument{Argument9, CodeArgument9};
CodeArgs = [
code.CallArgument{nothing, Span, CodeArgument},
code.CallArgument{nothing, Span2, CodeArgument2},
code.CallArgument{nothing, Span3, CodeArgument3},
code.CallArgument{nothing, Span4, CodeArgument4},
code.CallArgument{nothing, Span5, CodeArgument5},
code.CallArgument{nothing, Span6, CodeArgument6},
code.CallArgument{nothing, Span7, CodeArgument7},
code.CallArgument{nothing, Span8, CodeArgument8},
code.CallArgument{nothing, Span9, CodeArgument9}
]
) |
(
[
hack.CallArgument{Span_rel, Argument},
hack.CallArgument{Span2_rel, Argument2},
hack.CallArgument{Span3_rel, Argument3},
hack.CallArgument{Span4_rel, Argument4},
hack.CallArgument{Span5_rel, Argument5},
hack.CallArgument{Span6_rel, Argument6},
hack.CallArgument{Span7_rel, Argument7},
hack.CallArgument{Span8_rel, Argument8},
hack.CallArgument{Span9_rel, Argument9},
hack.CallArgument{Span10_rel, Argument10}
] = HackArgs;
[Span, Span2, Span3, Span4, Span5, Span6, Span7, Span8, Span9, Span10] = prim.relToAbsByteSpans
[ Span_rel,
Span2_rel,
Span3_rel,
Span4_rel,
Span5_rel,
Span6_rel,
Span7_rel,
Span8_rel,
Span9_rel,
Span10_rel
];
ConvertArgument{Argument, CodeArgument};
ConvertArgument{Argument2, CodeArgument2};
ConvertArgument{Argument3, CodeArgument3};
ConvertArgument{Argument4, CodeArgument4};
ConvertArgument{Argument5, CodeArgument5};
ConvertArgument{Argument6, CodeArgument6};
ConvertArgument{Argument7, CodeArgument7};
ConvertArgument{Argument8, CodeArgument8};
ConvertArgument{Argument9, CodeArgument9};
ConvertArgument{Argument10, CodeArgument10};
CodeArgs = [
code.CallArgument{nothing, Span, CodeArgument},
code.CallArgument{nothing, Span2, CodeArgument2},
code.CallArgument{nothing, Span3, CodeArgument3},
code.CallArgument{nothing, Span4, CodeArgument4},
code.CallArgument{nothing, Span5, CodeArgument5},
code.CallArgument{nothing, Span6, CodeArgument6},
code.CallArgument{nothing, Span7, CodeArgument7},
code.CallArgument{nothing, Span8, CodeArgument8},
code.CallArgument{nothing, Span9, CodeArgument9},
code.CallArgument{nothing, Span10, CodeArgument10}
]
) |
(
[
hack.CallArgument{Span_rel, Argument},
hack.CallArgument{Span2_rel, Argument2},
hack.CallArgument{Span3_rel, Argument3},
hack.CallArgument{Span4_rel, Argument4},
hack.CallArgument{Span5_rel, Argument5},
hack.CallArgument{Span6_rel, Argument6},
hack.CallArgument{Span7_rel, Argument7},
hack.CallArgument{Span8_rel, Argument8},
hack.CallArgument{Span9_rel, Argument9},
hack.CallArgument{Span10_rel, Argument10},
hack.CallArgument{Span11_rel, Argument11}
] = HackArgs;
[Span, Span2, Span3, Span4, Span5, Span6, Span7, Span8, Span9, Span10, Span11] = prim.relToAbsByteSpans
[ Span_rel,
Span2_rel,
Span3_rel,
Span4_rel,
Span5_rel,
Span6_rel,
Span7_rel,
Span8_rel,
Span9_rel,
Span10_rel,
Span11_rel
];
ConvertArgument{Argument, CodeArgument};
ConvertArgument{Argument2, CodeArgument2};
ConvertArgument{Argument3, CodeArgument3};
ConvertArgument{Argument4, CodeArgument4};
ConvertArgument{Argument5, CodeArgument5};
ConvertArgument{Argument6, CodeArgument6};
ConvertArgument{Argument7, CodeArgument7};
ConvertArgument{Argument8, CodeArgument8};
ConvertArgument{Argument9, CodeArgument9};
ConvertArgument{Argument10, CodeArgument10};
ConvertArgument{Argument11, CodeArgument11};
CodeArgs = [
code.CallArgument{nothing, Span, CodeArgument},
code.CallArgument{nothing, Span2, CodeArgument2},
code.CallArgument{nothing, Span3, CodeArgument3},
code.CallArgument{nothing, Span4, CodeArgument4},
code.CallArgument{nothing, Span5, CodeArgument5},
code.CallArgument{nothing, Span6, CodeArgument6},
code.CallArgument{nothing, Span7, CodeArgument7},
code.CallArgument{nothing, Span8, CodeArgument8},
code.CallArgument{nothing, Span9, CodeArgument9},
code.CallArgument{nothing, Span10, CodeArgument10},
code.CallArgument{nothing, Span11, CodeArgument11}
]
)
)

Expand Down

0 comments on commit 997368e

Please sign in to comment.