# Better way to interact with AST?

**URL:** <https://platform.jetbrains.com/t/better-way-to-interact-with-ast/4139>\
**Category:** IntelliJ Platform\
**Tags:** api, plugin-development\
**Created:** [April 22, 2026, 9:44pm UTC](https://platform.jetbrains.com/t/better-way-to-interact-with-ast/4139 "2026-04-22T21:44:41Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![SpacewaIker](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/spacewaiker/32/2858_2.png) [@SpacewaIker](https://platform.jetbrains.com/u/SpacewaIker)\
**Post date:** [April 22, 2026, 9:44pm UTC](https://platform.jetbrains.com/t/better-way-to-interact-with-ast/4139/1 "2026-04-22T21:44:41Z")

</div>

Hello!

I’ve been working on a plugin for a bit now and I started working on a feature which has to read the AST. The issue I’m facing is that the implementation seems to be very IDE-dependant, and unstandardized.

For instance, if I want to find a “function” ASTNode, the elementType is different for each language. So far my approach was to match all types into my own and use that within my code, but I feel like that’s not gonna work great in the long run. Today I looked at a C++ AST within Rider and functions were “DummyNodes” and “DummyBlocks” (so, first the block isn’t even a child of the function, and second, are they dummy?)

So anyhow, I’m wondering if instead there’s a better way to interact with the AST, that would be more language and IDE agnostic. Otherwise I’ll have to manually test each language I want to support which will take a lot of time.

Thanks!

---

<div class="post-metadata">

**Author:** ![vanco](https://avatars.discourse-cdn.com/v4/letter/v/3ab097/32.png) [@vanco](https://platform.jetbrains.com/u/vanco)\
**Post date:** [April 24, 2026, 2:14am UTC](https://platform.jetbrains.com/t/better-way-to-interact-with-ast/4139/2 "2026-04-24T02:14:21Z")

</div>

I have also encountered similar problems. Since CLion started using the Nova language engine, the AST and PSI APIs have become practically useless. Just as you pointed out, `DummyNodes` are everywhere. My plugin also cannot support Nova for the time being. I can only suggest users switch back to the Classic Language engine to be able to use it.

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [April 25, 2026, 10:39am UTC](https://platform.jetbrains.com/t/better-way-to-interact-with-ast/4139/3 "2026-04-25T10:39:26Z")

</div>

In general, you need extension point and implementations for different languages. Sometimes, the platform tries to generalize some aspects of PSI tree, such as `PsiLanguageInjectionHost` or `ContributedReferencesHost` interfaces, but methods/funstions are definitely all different in various languages.

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [April 25, 2026, 10:40am UTC](https://platform.jetbrains.com/t/better-way-to-interact-with-ast/4139/4 "2026-04-25T10:40:31Z")

</div>

> [@SpacewaIker](#):
>
> with the AST

It is also not really AST but more like PSI = AST + Semantics
