"No definition found ..." для не встроенных в Arduino IDE библиотек

Здравствуйте! С вами снова я :). И снова с глупыми вопросами. Как-то устал я от того, что в Arduino IDE при попытке посмотреть определение того или иного метода среда разработки пишет про “No definition found …”, и при этом всё компилируется и работает. Я уже знаю про разницу между #include <Library.h> и #include “Library.h”, и у меня всё сделано так, как говорится в гайдах про Arduino IDE, в т.ч. официальных. И я бы не стал вас беспокоить, но реально раздражает, что когда ты хочешь посмотреть определение чего-нибудь, а тебе в лицо “No definition found …”.

Помогите пожалуйста разобраться, что у меня не так со средой разработки.

Рассказываю подробно. Через менеджер библиотек скачал и установил библиотеку Adafruit_GFX.h. Библиотека, как и положено, легла в папку “Мои документы\Документы\Arduino\libraries” в подпапку Adafruit_GFX_Library:

Для использования библиотеки пытаюсь написать учебный пример:

Вроде всё просто. Но! Посмотреть определение библиотеки Wire.h можно:
image

А Адафрутовской Adafruit_GFX.h - не получается. Система говорит No definition found for ‘Adafruit_GFX.h’

При этом скетч успешно компилируется, и на использование методов из библиотеки не ругается:


image

Вот что ей не нравится?

После компиляции ничего не меняется?

Нет. Вот сейчас после вашего вопроса ещё раз выполнил компиляцию, и ситуация та же - ни посмотреть определение библиотеки невозможно, ни команды Go to definition в контекстном меню. На всякий случай сохранил файл и ещё раз проверил - глюк всё тот же.

Перезапустил Arduino IDE, и слава тебе господи, команда Go to Definition вернулась в контекстное меню:
image

Но непонятно почему она пропадает из контекстного меню. Я вроде ничего такого не делаю особенного…

Странно, что несмотря на сообщение No definition found for ‘Adafruit_GFX.h’:
image

система библиотеку видит (как я думаю), потому что при написании кода работают подсказки синтаксиса экспортируемых ею методов (да? а то может быть я ошибаюсь):
image
Откуда же среда разработки может взять подсказку синтаксиса метода drawPixel, как не из библиотеки Adafruit_GFX, класс которой я использовал при создании объекта oled?!
image

Справедливости ради, вы могли бы сказать что я пишу про Adafruit_GFX, а объект создаю из другой библиотеки, но то же самое происходит и со второй не встроенной в Arduino IDE библиотекой Adafruit_SSD1306 - No definition found for ‘Adafruit_SSD1306’:
image

Но и она тоже лежит в положенном ей месте:
image

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

“Авторское право”?

Что вы имеете ввиду? Я вроде бы в этой ситуации ничьих авторских прав не нарушаю.

Авторы каким-то образом скрывают содержание. Это только предположение.

Тогда это очень странный способ, потому что никто не мешает пойти мне в каталог с библиотекой, открыть ничем не защищённый заголовочный файл, и посмотреть определение метода там:


Собственно говоря, я так пока и делаю. Но это не очень удобно :disappointed_relieved:

Нет, это глюк среды. В vs code такое поведение характерно до первой компиляции, потом пути к библиотекам прописываются в настройках проекта, и все определения становятся доступными. Как там в новой Ардуине - хз

Это называется багом. И о багах следует писать разработчикам среды, а не сюда.

Ясно. Ладно, будем надеяться что в следующих релизах среды эту ошибку пофиксят. Всем спасибо. А я уж думал что это у меня опять руки не из того места растут… Отлегло.

а в IDE - после

Окажется ли это для ТС важным, но я не смог повторить его историю ни на Линуксе, ни на Вин10 на Ардуино 2.0.4 . Нужно чуть подождать, по ка ИДЕ пишет “лоадинг” и она находит все инклюды. По крайней мере у меня. Но такой глюк был! Я помню, поэтому сразу не стал обращать внимание на тему. Сам видел такое, плюнул и переключился на ВСКод. Сейчас нашел минутку и проверил. Даже на виртуалку Вин10 тоже воткнул 2.0.4, но и там глюка нет.
Может быть нужно все обновить и баг исчезнет? Может быть обычная история с правами и русскими именами? Потому, что повторю - ни на Линухе ни на Винде сейчас я не смог повторить баг.
Новая ИДЕ версии 2 сделана полностью на основе ВСКода. По идее не должно быть разницы. И в ВСкоде плагин “ардуино” - очень глючный! Лучше, чем ИДЕ, но не вызывает доверия полного.