@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhutilPHPCodeSnippetContextFreeGrammar
4 extends PhutilCLikeCodeSnippetContextFreeGrammar {
5
6 protected function buildRuleSet() {
7 return array_merge(parent::buildRuleSet(), $this->getClassRuleSets());
8 }
9
10 protected function getStartGrammarSet() {
11 $start_grammar = parent::getStartGrammarSet();
12
13 $start_grammar['start'][] = '[classdecl]';
14 $start_grammar['start'][] = '[classdecl]';
15
16 return $start_grammar;
17 }
18
19 protected function getExprGrammarSet() {
20 $expr = parent::getExprGrammarSet();
21
22 $expr['expr'][] = 'new [classname]([funccallparam])';
23
24 $expr['expr'][] = '[classname]::[funccall]';
25
26 return $expr;
27 }
28
29 protected function getVarNameGrammarSet() {
30 $varnames = parent::getVarNameGrammarSet();
31
32 foreach ($varnames as $vn_key => $vn_val) {
33 foreach ($vn_val as $vv_key => $vv_value) {
34 $varnames[$vn_key][$vv_key] = '$'.$vv_value;
35 }
36 }
37
38 return $varnames;
39 }
40
41 protected function getFuncNameGrammarSet() {
42 return $this->buildGrammarSet('funcname',
43 array_mergev(get_defined_functions()));
44 }
45
46 protected function getMethodCallGrammarSet() {
47 return $this->buildGrammarSet('methodcall',
48 array(
49 '$this->[funccall]',
50 'self::[funccall]',
51 'static::[funccall]',
52 '[varname]->[funccall]',
53 '[classname]::[funccall]',
54 ));
55 }
56
57}