Nova versão com melhorias e funcionalidades adicionadas com foco em arquivos device tree source:

  • Cores do Syntax highlighting melhoradas;

  • Device Tree Compiler linter diagnostics;

  • Symbol lookup apenas no escopo do arquivo, lookup dos #include;

  • DocumentLink no #include e compatible string para arquivos de header .h/ device tree source include .dtsi / documentação .txt .yaml / implementação .c;

    • com mouse hover (lista de arquivos com o match)

    • com ctrl+click (abre diretamente arquivo .c da implementação)

  • IntelliSense para label node property;

🎨 Cores do Syntax Highlight Melhoradas

Antes:

Depois:

🌲 Device Tree Compiler Linter Diagnostics

⚠️ Essa funcionalidade depende do device tree compiler/dtc. Tenha certeza de ter esse pacote instalado em sua distribuição.

🧪 Essa é uma funcionalidade experimental, esteja ciente que comportamentos não esperados podem ocorrer.

Ao salvar um arquivo .dts ou .dtsi a extensão automaticamente compila e transforma o output do device tree compiler em entradas de diagnostico:

🔣 Symbol Lookup (goto definition) Restringido no Contexto do Arquivo

🧪 Essa é uma funcionalidade experimental, esteja ciente que comportamentos não esperados podem ocorrer.

Utilizando a funcionalidade do ctags o DefinitionProvider apresentava uma lista com todos os símbolos indexadas para arquivos .dts ou .dtsi:

Com o novo DTSEngine o index é feito por contexto de arquivo. Assim o DefinitionProvider mostra na lista apenas os símbolos presentes no contexto (includes):

🔗 Document Link para #include e compatible

Diretivas #include e compatible = "match" agora são resolvidos como links para: no caso de #include ao respectivo arquivo apontado pelo caminho, no caso de compatible = "match" para o código fonte .c e também arquivos de documentação .txt/.yaml que tenham o match:

🧠 Label/Node/Property IntelliSense

🧪 Essa é uma funcionalidade experimental, esteja ciente que comportamentos não esperados podem ocorrer.

O novo DTSEngine utiliza da documentação de device tree bindings, apenas documentação em .yaml suportada, para dar dicas de completion. Fazendo o binding entre o compatible do nó, apresenta as propriedades documentadas:

O IntellinSense também ajuda com dicas de referência para overwriting dos nós. Digitando & e após ctrl+space, uma lista dos nós mais próximos será apresentada. Não se preocupe em fazer o overwriting do compatible, o IntellinSense utilizará o compatible do nó referência para as dicas:

🧪 Habilitando Funcionalidades Experimentais

⚠️ Para que a experiência de uso anterior não seja afetada, essas funcionalidades apresentadas aqui não estão habilitadas por padrão. Ainda estão em fase de testes, podem ocorrer problemas de performance e exceções não tratadas.

Caso você deseje já testar e trabalhar com as funcionalidades experimentais, você deve editar as seguintes configurações:

⚠️ Podem ser adicionadas tanto apenas para um workspace específico em {seuWorkSpaceFolder}/.vscode/settings.json, quanto no settings.json global.

Desabilite o índice ctags para arquivos .dts e .dtsi, para que a busca de símbolos acontece apenas no contexto do arquivo, você deve remover a entrada DTS da configuração:

 "ctags.languages": [
        "C",
        "C++",
        "DTS",
        "Kconfig",
        "Make"
    ],

Após remover o "DTS" da lista gere novamente o índice:

A nova engine utiliza a documentação .yaml dos device tree bindings para o IntelliSense. Utilize a seguinte configuração para apontar o caminho da pasta de documentação:

"devicetree.bindings": [
    "${workspaceFolder}/Documentation/devicetree/bindings"
],

⚠️ Você pode usar a variável do VS Code ${workspaceFolder} e abrir a raiz do repositório do Linux ou configurar essa entrada como um caminho completo.

Após esses passos habilite as funcionalidades experimentais adicionando:

"kerneldev.experimental.newDtsEngine": true

⚠️ Ao salvar a mudança dessa configuração a instância do VS Code será automaticamente reinicializada.

Com essas configurações nenhum comando extra é necessário. Apenas abra um arquivo .dts ou .dtsi e aproveite as novas funcionalidades (ou não 😅🪲).

✋ Considerações Finais

Vale a pena alertar mais uma vez:

⚠️🧪 Essas são funcionalidades experimentais, esteja ciente que comportamentos não esperados podem ocorrer.

Estou já apresentando e colocando em público pois procuro feedback. Os casos de uso de device tree são bem amplos e podem ocorrer vários casos específicos. Caso você utilize e tenha alguma opinião, ache um bug ou tenha algum caso de uso que não foi tratado, por favor abra uma issue aqui: Issues · microhobby/linuxkerneldev (github.com)

Você também consegue me achar nas redes sociais: