Могу ли я настроить подсветку экранированных символов в строке?

Учитывая простую ошибку, например

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("\");     // note: " is escaped, so this won't compile
}

Это отображается в Arduino IDE 2.0.3 как

Подсветка синтаксиса в Arduino IDE 2.0

и проблему трудно обнаружить.

В средах разработки Jetbrains предусмотрена специальная подсветка экранированных символов, например

Специальное выделение escape-символов

что делает проблему более очевидной, поскольку две кавычки имеют разный цвет.

Есть ли шанс, что это можно настроить и в новой среде Arduino IDE 2.0.3?

Потому что в комментариях был задан вопрос: нет, подсветка синтаксиса не выделяет экранированный символ, когда строка завершена. Обратная косая черта и кавычки по-прежнему зеленые.

Полная строка

, 👍0

Обсуждение

@hcheung "\" не является строкой, так как не имеет закрывающей кавычки. \" — это экранированный символ в строке., @Thomas Weller

"\" - это escape " без закрытия ", вы можете получить правильную подсветку синтаксиса, если сделаете "\""., @hcheung

используйте текстовый редактор, который его поддерживает, @jsotola

@jsotola: я работаю с детьми в возрасте 10 лет. Я не могу просто сказать им, чтобы они переключили редактор., @Thomas Weller

@hcheung: Нет, когда строка завершена, она не выделяется: https://i.stack.imgur.com/Dbb6x.png, @Thomas Weller


1 ответ


1

Есть ли шанс, что это можно настроить и в новой среде Arduino IDE 2.0.3?

Да. Вам потребуется включить языковые функции Arduino, предоставляемые языковым сервером. По умолчанию они отключены.

  • Нажмите F1,
  • Введите Настройки: Открыть настройки (JSON),
  • Нажмите Ввод,
  • Откроется файл settings.json.

Добавьте в JSON следующее и сохраните его, если у вас не включено автосохранение:

{
  "arduino.language.realTimeDiagnostics": true
}

Мой settings.json с включенными функциями языка Arduino.

Выберите плату. Вы можете игнорировать выбор порта, если хотите. Языковая функция должна запуститься, и вы увидите ошибку в редакторе.

Дополнительные сведения о расширенных настройках можно найти здесь. .

,

Спасибо. Несомненно, это очень полезно. Однако цвет сбежавшего символа остается прежним., @Thomas Weller

В IDE JetBrains вы написали Serial.println("\");, а в IDE Arduino Serial.println("\"); // примечание: " экранировано, поэтому это не будет компилироваться. Не могли бы вы дополнить свой вопрос о выделении синтаксиса в JetBrains более длинным примером? Спасибо! Я сравнил встроенное расширение C++ в VS Code с Arduino IDE, и они ведут себя одинаково. Ошибка компилятора кажется действительной: _Ожидаемое выражение_ clang (ожидаемое_выражение). Я не думаю, что вы сможете настроить [подсветку синтаксиса](https://code.visualstudio.com/api/language -extensions/syntax-highlight-guide) в Arduino IDE., @dankeboy36

Мой VSCode имеет подсветку синтаксиса в строках: https://i.stack.imgur.com/Tq9iS.png Давно им не пользовался, но ИМХО использую его только для Typescript, а не C++, поэтому не думаю, что у меня установлены какие-либо расширения для С++, и он даже спрашивает меня, хочу ли я установить некоторые из них., @Thomas Weller

Мне жаль, что я не мог помочь вам с этим. Этот разговор возможен только в том случае, если мы сравним одни и те же фрагменты кода в разных IDE и редакторах. Я не говорил, что VS Code, Arduino IDE или другие инструменты не могут применять различную окраску синтаксиса к токену регулярного выражения, но ваш первоначальный вариант использования отличается; это чистая ошибка компилятора. Даже встроенная подсветка фрагментов StackOverflow показывает тот же результат, что и Arduino IDE; пожалуйста, посмотрите на свой исходный вопрос и проверьте фрагмент., @dankeboy36

Я сделал еще одну проверку и могу подтвердить ошибку в Arduino IDE, которая не выделяет совпадения с регулярными выражениями. Если ошибок компилятора нет, VS Code правильно выделяет \d в строке "\d+". Arduino IDE 2.0.3 не может этого сделать., @dankeboy36

Еще одно обновление. Подсветка синтаксиса регулярных выражений работает в Arduino IDE как с темами «Светлая (Theia)», так и с «Темной (Theia)», но не с темами Arduino. Действия по воспроизведению. Ваш скетч: void setup() {} void loop() { Serial.println("\d"); }. \d не выделен. Откройте настройки с помощью Ctrl/+,. Выберите одну из тем Theia из раскрывающегося списка и закройте диалоговое окно, нажав «ОК». \d выделено. Если я выберу любую из тем Arduino, это не сработает. Это баг темы., @dankeboy36

Если вы хотите дать дополнительный ответ, я с радостью проголосую и приму его., @Thomas Weller