Skip to content

Rekkonnect/Syndiesis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Syndiesis

The most revolutionary syntax visualizer for C#

Motivation

The project was inspired by the task for applying into a Roslyn internship position regarding C# syntax highlighting at JetBrains: (project / task)

The main design inspiration is SharpLab. The syntax view feature of SharpLab is the main design that the app built upon.

Despite not applying for the internship, I wanted to finish the project and release it into a usable state without entering the depths of feature creep.

Usage

Download from the Releases page.

Check the change log here.

View the wiki for detailed documentation.

Preview

The video was shot in version 1.0.0

Syndiesis.1.0.0.mp4

Stack

Features

Below is a short list of features:

  • Code editor
    • Text editing
    • Text selection
    • Scrolling
    • Copy/paste text
    • Navigation with keybinds
    • Smart indentation
  • Syntax visualizer
    • Current cursor syntax node highlighting
    • Tree view of nodes
    • Display of property names of syntax objects
    • Colorful display of different syntax list view nodes
    • Navigation to code snippet span of selected node

The entirety of the app is built using basic components in Avalonia. Everything is built from scratch without external dependencies for UI.

Desired features

Desired features are listed in the issues.

Ruled-out features

  • Auto-complete on text

Design philosophy

The syntax visualizer should provide detailed information about how Roslyn parses the given C# code snippet, and in a pretty and user-friendly format. SharpLab lacks in readability of the tree, and it also doesn't paint the entire picture as intended.

The properties of the nodes are automatically extracted via reflection. Some are filtered out due to duplication in most cases, and in other cases they were not providing any helpful information.

Each different node type is differently treated to extract the most useful information out of it. If you encounter a node missing critical information, or displaying it weirdly, please file an issue.