VSCode Intellisense selecting the wrong libraries for PlatformIO code

I’m using VSCode with the PlatformIO plugin and PlatformIO bazel integration (GitHub - mum4k/platformio_rules: These are Bazel Skylark rules for building and uploading Arduino programs using the PlatformIO build system.) to write code for multiple different types of micro controllers (ATTiny84, ATTiny85, Arduino Nano, ESP32-S3). The code builds correctly as the bazel integration to PlatformIO selects the correct libraries, but as there are libraries with the same name made for different types of micro-controllers, IntelliSense will select one kind of at random and will mark a bunch of symbols as not defined or libraries not found (effectively, a lot of red squiggly marks)

As an example, I have some code that configures a timer for ATTiny85, and access registers like TCCR1 and OCR1A, which are correctly defined in Arduino.h for that micro-controller, but are not defined in any of the other 4 versions of the library available

Another example would be Arduino.h not defining Serial when built on ATTiny, but doing it when working with the Arduino Nano

The code I’m working on here is C++

Because of the fact that the whole project includes code for all of those micro-controllers (the project makes use of several different types of micros) I need to put the directories where all of those libraries are in for all of the micros in the include path, which is what I think is causing this problem. I have tried to fully qualify the path for the library that I’m using in my code, but that doesn’t work because libraries included inside those libraries are not (and cannot be) fully qualified, so at some point this problem happens again, just one level of indirection down. Also, this code might end up being open source at some point, hence I cannot force my own absolute paths there

I would like either

  • For VSCode IntelliSense to get information about the right libraries to include through either PlatformIO or Bazel (best solution)
  • If that doesn’t work, I’d like to have the option to change the include path on a per-directory basis. This would add additional directory structure on my project, and I’m still not 100% sure it would work, but would be a start

At this point I feel like my only option is to disable the red squiggly lines completely, but that looks like a sub-optimal solution

…but why not PlatformIO directly? Intellisense for multiple IDEs is no problem there. These Bazel rules just end up generating a platformio.ini and do a pio run, overcomplicating things. PlatformIO can already correctly generate the Intellisense files for only the environment you’re working in through the -e switch, e.g., pio init --ide=vscode -e nanoatmega328.

Overall it sounds like a problem in that Bazel integration to me, and not a PlatformIO problem per-sé. Can you file an issue in Issues · mum4k/platformio_rules · GitHub?

I’m using the bazel integration because this project is way bigger than the microcontrollers design, and the whole thing works through Bazel, so it’s just simpler that way. Also I’ve been working with Bazel for over a decade, so I feel right at home

To me honestly the problem seems to be in IntelliSense, and I posted this same question there, but I thought someone here might know, so it would be worth the try :wink: