?.) y el operador nullish coalescing (??) son tu red de seguridad.
Decoration.widget) que sustituyen elementos nativos. Siempre usa la View Plugin API o los selectores de clase CM6.
app.internalPlugins usan optional chainingactive-leaf-change tiene guard clause para null.match() se verifican antes de acceder por índicea[href] en Live Preview → migrar a clases CM6editor.wordAt() verificado antes de llamar a getRange()registerEvent() para limpieza automáticaCtrl/Cmd+Shift+I, filtra por el nombre de tu plugin y usa app.plugins.plugins["mi-plugin"] para acceder a la instancia en vivo.https://docs.obsidian.md/Plugins/Getting+started/Build+a+plugin · Referencia CM6: https://codemirror.net/docs/ref/