**ANNOUNCEMENT** Genio - The Haiku IDE

We’ll definitely include those two, then!
Having an half-translated application doesn’t seem like a nice user experience, though :laughing:

i have try it, very convenience… thank you for make it.
the issue that i dont know sometime find and replace is not working…

2 Likes

Please open an issue by providing clear steps to reproduce it including Genio version (2.1 or dev) and possibly a reference to the project.
Thank you!

Quick update about improving the .NET support in Genio and a few collaterals…

After a while I managed to polish the OmniSharp port for Haiku. It requires a few patches to the .csproj files and a small one to the code itself.
OmniSharp requires Mono under MacOS and Linux and .NET Core (6 or greater) under Windows.
Under Haiku we just have net8.0 so it has been patched accordingly.

The repo here is a fork from the official O# repo with patches for Haiku. Follow the instructions in the README.md files, it’s as simple as running

dotnet build

but with a few manual steps to copy the artifacts to the right location.
I’ve planned to publish nuget packages for this Haiku port.

On the Genio side, I’ve enhance the LSP support by:

  • adding support for the rsolve provider aka textDocument/CodeAction and codeAction/resolve (OmniSharp)
  • fixing GoTo implementation/definition for C# (OmniSharp)
  • (WIP) LSP Rename (all language servers including clangd)

These changes are not merged (or even pushed like for example the rename feature) yet.
Once they are I will update the instruction to get and install OmniSharp.

10 Likes

It’s time for another update as we prepare for another super-amazing Summer release :parasol_on_ground:
We mainly focused on improving the LSP stack this time and we have a juicy feature ready to be released… symbol Outline!
Genio now retrieves the list of symbols defined in a source file from the language server, the list can be sorted, the nodes can be expanded or collapsed and now we can rename a symbol directly from there!
Being part of the standard LSP specification, all language server should be supported. We have tested it with clangd and OmniSharp.


It is already available from the main branch, should you be so impatient to try it.

Thanks to @humdinger and @madmax for their valuable contribution and to everyone use Genio every day and provide feedback, suggestions, criticisms.
We would like to hear from… what are you working on with Genio?
Enjoy!

21 Likes

Nice! I will probably never use this IDE, but wouldn’t it make more sense to have the outline built in the source tree on the left side? Even have it show under the file. I really like this feature from Emacs (Treemacs plugin).

I never used Emacs so I can’t comment on that.
However, one day we will implement a customisable UI where you can move the panels around and pile them with an accordion like Visual Studio Code.
Until then we think it would be better to have both the project browser/Source Conttol and the outline visible at the same time.

5 Likes

Can’t wait for the symbol outline!
Another important feature which should be a quick one is sync navigation between project outline and open tabs, and chance to get this in?

Are there plans to have a side-by-side view? This would be so handy when refactoring and keeping headers and implementation in sync…

Thanks for all the work, using it whenever I find time and energy to build SEN:)

1 Like

In theory you don’t have to wait, just build Genio from main branch…

Could you elaborate? Outline is synchronised with the editor already. Whenever you open a new tab, go back to an existing one or make some change to the code, genio asks the language server to update it unless there is a syntax error.

Sure, one day… patches are welcome, though :smiley:

3 Likes

I had Genio crash for the first time today when quickly moving around and triggering tooltips, will supply a crash report in Github. Nothing tragic, all saved and versioned anyway.

However that finally nudged me to check out the latest source and compile it - and it worked with 2 minor fixes, very nice to see the improvements! Also looks better now.
Just for the docs:

  1. building with clang requires an additional package not mentioned in the README:
    Else, you will get an error
    clang++: error: unable to execute command: Executable "ld.lld" doesn't exist!
  2. even then it did not work for me (latest code from main branch):
    In file included from src/config/ConfigWindow.cpp:27: src/config/OptionPopUpString.h:24:9: error: 'OptionPopUpString::SetValue' hides overloaded virtual function [-Werror,-Woverloaded-virtual] 24 | void SetValue(const char* value)
  3. building with GCC requires an additional package llvm17_lld

First find: Outline does not update on start, but switching tabs triggers the update.

With “navigation sync” I was referring to visually synchronising the active tab with the project file list, so the file currently opened in the editor is also highlighted in the project outline.
IntelliJ allows you to configure synchronisation to either work one way or both ways.

8 Likes

I’m always glad to see native Haiku apps used.

3 Likes

Hi there.
Thanks for the clang hints, we’ll update the docs soon.
The outline problem should be fixed now.

3 Likes

We also fixed clang build, if you’re still interested

2 Likes

Sure, I’ll give it a try tomorrow!

Thanks for the great work on a really useful IDE!

2 Likes

@jackburton At the moment Genio “requires” LLVM17 (forced in the recipe), I’m looking into an open PR for LLVM18, now when I install the newer LLVM will uninstall Genio, maybe not force the LLVM version in the recipe, or does it realy “need” LLVM17?

We haven’t tested with llvm18 but shouldn’t be an issue (if llvm 18 doesnt have issues on its own, of course). What do you think is the correct way to declare the dependency to avoid tieing to a specific version?

Could run some tests here, so far I haven’t seen any downside with LLVM18 (used it to check builds for KDevelop and Qt-Creator), withouth the “hard” requirement in Genio it seems to work just as nice as with it.
LLVM isn’t used in the build from what I can see, so it’s “just” a runtime dependency?

EDIT: with lib:libclang$secondaryArchSuffix (without version) it doesn’t care which LLVM (clang) is installed, could switch v17 with v18 without uninstalling Genio then, n00b on how to check if v18 is good enough for Genio though :slight_smile:

Clang is not llvm, clang depende on llvm but not the other way around.

My guess is that it is using/needs clang, libclang is provided by the clang package, the base llvm packageg don’t conflict and can be co-installed.

pkgman search lib:libclang
Status  Name          Description                                              
-------------------------------------------------------------------------------
S       llvm12_libs   Modular and reuseable compiler and toolchain technologies
        llvm16_clang  Modular and reuseable compiler and toolchain technologies
S       llvm17_clang  Modular and reuseable compiler and toolchain technologies
        llvm9_libs    Modular and reuseable compiler and toolchain technologies

EDIT: another way to request clang could be with cmd:clang

pkgman search cmd:clang
Status  Name          Description                                              
-------------------------------------------------------------------------------
        llvm12_clang  Modular and reuseable compiler and toolchain technologies
        llvm16_clang  Modular and reuseable compiler and toolchain technologies
S       llvm17_clang  Modular and reuseable compiler and toolchain technologies
        llvm9_clang   Modular and reuseable compiler and toolchain technologies

If it needs specific libraries it should indeed only depend on the library names, and not on a package name. : )

1 Like