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
ecompatible
string para arquivos deheader .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
;
Antes:
Depois:
⚠️ Essa funcionalidade depende dodevice 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:
🧪 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):
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:
🧪 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:
⚠️ 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 nosettings.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 😅🪲).
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: