2014-09-16 4 views
0

Я использую Sublime Text 3 как редактор PHP, я настраивал файл PHP.tmLanguage, чтобы включить больше областей синтаксиса, сейчас я не могу понять, как захват класса.Как вызывать вызовы метода PHP в Sublime Text (textmate)

$html = new HTML("hr"); 
$html->output_ml("moo"); 

output_ml в настоящее время объявлен как объем variable.other.property.php Я хотел бы добавить область, относится конкретно к методу класса вызовов, но у меня возникают проблемы, определяющий регулярное выражение в файл tmLanguage.

Я попытался

<dict> 
    <key>match</key> 
    <string>(?i)\$[a-z_][a-z0-9_]*-&gt;([a-z_][a-z_0-9]*)\s*\(</string> 
    <key>name</key> 
    <string>meta.method-call.php</string> 
</dict> 
+0

так что вы пробовали? – MattDMo

+0

Я редактировал сообщение, чтобы включить то, что я пробовал –

ответ

1

Вы были очень близки, я просто переделаны несколько вещей:

(?i:(?!\$[a-z_][a-z0-9_]*-&gt;)([a-z_][a-z_0-9]*)\s*\() 

Первое, что я сделал, было обернуть все выражение в «случае без учета регистра» модификатор, так что ничего не пропало. Наверное, не нужно, но что угодно. Во-вторых, и что более важно, я взял вашу первую группу, которая была вне круглых скобок, и сделала их негативным взглядом. Таким образом, они соответствуют имени класса и стрелке, но не сообщают об этом - в основном говорят: «Сопоставьте все, что впереди нас, пока мы существуем перед ним, но не будем нам соответствовать».

Теперь у вас будет область действия, совпадающая с именем метода.

Demo


Теперь, вот что я не понимаю - почему вы должны сделать это. Я поддерживаю как language syntax, так и color scheme, поэтому у меня есть большой опыт работы с областями в Sublime Text и TextMate. И, насколько мне известно, PHP .tmLanguage уже включает области для вызовов функций. Я не эксперт PHP любых средств, но я знаю основы, так что я сделал три примера различных вызовов функции PHP:

PHP function calls

Green выдвигает на первый план большого разнообразия вызовов функций на разных языках. В верхнем примере baz_quux имеет номер meta.function-call.object.php, в среднем примере это meta.function-call.static.php, а в нижней части - meta.function-call.php. Я не понимаю, откуда вы получаете variable.other.property.php.

Однако, если я забрать скобки после вызова функции выше:

PHP function calls, no parens

Я получаю следующую области действия, сверху вниз: variable.other.property.php (! аха), constant.other.class.php и constant.other.php. Если я вернусь назад, и добавьте пробел или три после окончания имени функции, они будут выделены как функции зеленым цветом.


Итак, пока у нас было какое-то удовольствие с регулярными выражениями сегодня, в конечном итоге ваша работа уже была сделана для вас.Если вы собираетесь заниматься поиском больше, я настоятельно рекомендую плагин ScopeAlways, который, как и его название, всегда отображает всю область текущего положения курсора в нижней панели (вы можете отключить ее с помощью команды Палитра, если хотите). Если я получаю запрос на выделение подсветки моей цветовой схемы на новый язык, я просто открываю столько кода, сколько могу найти и протащить мышкой, глядя на разные области, а затем редактирую тему, чтобы при необходимости исправить цвета, или добавить новые для новых областей. I , затем сканирование через файл .tmLanguage (после converting it to YAML) и посмотреть, пропустил ли я что-нибудь.

Удачи вам в работе!

Смежные вопросы