MCPcopy Index your code
hub / github.com/microsoft/vscode-cpptools / parse

Function parse

Extension/src/Utility/Eventing/eventParser.ts:24–130  ·  view source on GitHub ↗
(triggerExpression: string, sourceToBindTo: ArbitraryObject | undefined)

Source from the content-addressed store, hash-verified

22}
23
24export function parse(triggerExpression: string, sourceToBindTo: ArbitraryObject | undefined): [boolean, boolean, Map<string, Filter | true>, ArbitraryObject?] {
25 //
26 // [modifiers] event[filter]:discriminator[filter]/discriminator[filter]/discriminator[filter]...
27 //
28
29 const scanner = new Scanner(triggerExpression).start();
30 let token: Token;
31
32 let once: boolean = false;
33 let source: any;
34 let isSync = false;
35
36 // drop any leading whitespace
37 scanner.takeWhiteSpaceAndNewLines();
38
39 // grab modifiers off the front
40 while (isKeyword(token = scanner.take())) {
41 switch (token.kind) {
42 case Kind.OnceKeyword:
43 once = true;
44 break;
45 case Kind.ThisKeyword:
46 source = sourceToBindTo;
47 break;
48 case Kind.AwaitKeyword:
49 isSync = true;
50 break;
51 default:
52 throw new Error(`unexpected keyword ${token.kind}`);
53 }
54 scanner.takeWhiteSpaceAndNewLines();
55 }
56
57 const filters = new Map<string, Filter | true>(); // <name, filterFn>
58
59 function addFilter(name: string) {
60 scanner.takeWhiteSpaceAndNewLines();
61 token = scanner.take();
62 if (token.kind === Kind.OpenBracket) {
63 // has a filter expression of some kind.
64 filters.set(name, generateFilterFn(scanner));
65 token = scanner.take();
66 } else {
67 // if there isn't a filter, then we just need to add a filter with 'true'
68 filters.set(name, true);
69 }
70 scanner.takeWhiteSpaceAndNewLines();
71 return token.kind === Kind.EndOfFile;
72 }
73
74 processing:
75 do {
76 switch (token.kind) {
77 case Kind.EndOfFile:
78 break processing;
79
80 case Kind.Slash:
81 // separator - skip this token (we can skip over multiple slashes, it's ok...)

Callers 5

parser.test.tsFile · 0.90
onFunction · 0.90
sshCommandToConfigFunction · 0.85
getSshConfigurationFunction · 0.85
getIncludedConfigFileFunction · 0.85

Calls 9

smashFunction · 0.90
verboseFunction · 0.90
isKeywordFunction · 0.85
addFilterFunction · 0.85
generateFilterFnFunction · 0.85
startMethod · 0.80
takeMethod · 0.80
setMethod · 0.45

Tested by

no test coverage detected