regex — Как выделить вызовы методов PHP в возвышенном тексте (textmate)

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

$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

Решение

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

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

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

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

демонстрация


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

Вызовы функций PHP

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

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

Вызовы функций PHP, без паренов

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


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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]