Я использую 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_]*->([a-z_][a-z_0-9]*)\s*\(</string>
<key>name</key>
<string>meta.method-call.php</string>
</dict>
Вы были довольно близки, я просто подправил несколько вещей:
(?i:(?!\$[a-z_][a-z0-9_]*->)([a-z_][a-z_0-9]*)\s*\()
Первым делом я обернул все выражение в модификатор «без учета регистра», чтобы ничего не пропустить. Вероятно, не обязательно, но что угодно. Во-вторых, и что более важно, я взял вашу первую группу, которая была за скобками, и сделал их негативными. Таким образом, они сопоставляют имя класса и стрелку, но не сообщают об этом — в основном говоря: «сопоставьте то, что впереди нас, пока мы существуем перед ним, но не сопоставьте нас».
Теперь у вас будет область видимости, которая соответствует только имени метода.
Теперь вот что я не понимаю — почему вы должны это делать. Я поддерживаю как синтаксис языка и Цветовая схема, поэтому у меня большой опыт работы с областями видимости в Sublime Text и TextMate. И, насколько мне известно, PHP .tmLanguage
уже включает области для вызовов функций. Я ни в коем случае не эксперт по PHP, но я знаю основы, поэтому я сделал три примера различных вызовов функций PHP:
Зеленый цвет выделяет большое разнообразие вызовов функций на разных языках. В верхнем примере baz_quux
определяется как meta.function-call.object.php
в среднем примере это meta.function-call.static.php
и внизу это просто meta.function-call.php
, Я не понимаю откуда ты variable.other.property.php
от.
Однако, если я уберу скобки после вызова функции выше:
Я получаю следующие области сверху вниз: variable.other.property.php
(Ага!), constant.other.class.php
, а также constant.other.php
, Если я поставлю парены обратно и добавлю один или три пробела после конца имени функции, они все равно будут выделены как функции зеленым цветом.
Итак, хотя сегодня мы повеселились с регулярными выражениями, в конечном счете, ваша работа уже сделана для вас. Если вы собираетесь больше заниматься поиском, я очень рекомендую ScopeAlways
Плагин, который, как следует из его названия, всегда перечисляет полный объем текущей позиции курсора в нижней панели (вы можете отключить его через командную палитру, если хотите). Если я получаю запрос на расширение выделения моей цветовой схемы на новый язык, я просто открываю столько кода, сколько смогу найти и ковыряюсь с помощью мыши, просматривая различные области видимости, затем редактируя мою тему, чтобы корректировать цвета по мере необходимости, или добавьте новые для совершенно новых областей применения. я затем сканировать через .tmLanguage
файл (после преобразование его в YAML) и посмотреть, если я что-то пропустил.
Удачи в работе!
Других решений пока нет …