Skip to content

A highly customizable IDE written in Kotlin using Compose as an uni NSU team project

License

Notifications You must be signed in to change notification settings

null-company/NPidE

Repository files navigation


NPidE logo

🍇 NPidE 🍇

A highly configurable minimalistic IDE for language developers

kotlin gradle Compose Compliance

Why NPidE?Supported languagesInstallationHow to create project and build/run/debug itFunctionalityHow to add new language?ArchitectureLicenseAuthorsSupportPlans

❔ Why NPidE?

The main feature of this IDE is its customizability. You can add supported languages, project types and so on in a declarative style using config files

📙 Supported languages

AssemblyScript Clojure

You can look at the languages in this repo

⚙️ Installation

  1. Clone repository OR you can just download NPidE from release page
    git clone https://github.com/nsu-null/NPidE
  2. Create JAR
    gradle jar   # or ./gradlew jar 
  3. Execute JAR
    java -jar path/to/NPidE-<version>.jar

🏭 How to create project and build/run/debug it

  1. Open NPidE then click the button "Add new project" and choose project directory
  2. Download language package from repo and locate it(recommend to place it in the root of the project)
  3. Click the buttons "Menu" -> "Config" and write project name, choose configuration file of language - LanguageDistributionInfo.yaml and choose grammar and syntax highlighting files
  4. Write your code in our IDE(you can create/remove/rename/.. directories, files)
  5. Again click the buttons "Menu" -> "Config" and write entry point/main class and add all the project files
  6. Now you can close it and click the buttons "Build"/"Run"/"Debug" create breakpoints ans so on

🔢 Functionality

  • Create/remove projects
  • Configurate compilation/execution/debug for languages
  • Configurate grammar and highlight syntax for languages
  • Open/edit/close/create/delete/save/rename/.. files
  • Build/Run/Debug project with supported languages
  • Add/remove breakpoints for debugging
  • Watch system variables in debug mode
  • Step system in debug mode
  • Terminal window in NPidE

➕ How to add new language?

To fully implement the language, you need:

  • everything that is for a specific language (debugger, compiler ..)
  • the principal way to let the IDE know about the compiler/debugger/.. is to inherit from the interface and specify it in the language config. But there is also an existing implementation that delegates to another program (for example, a Python script or any other language), passing all information about the project to it.
  • language grammar file (g4)
  • language syntax highlighting file (json)
  • configuration file - LanguageDistributionInfo.yaml (you can find example of config file here)

And then you can create PR to this repo :)

🔧 Architecture

Modules

This module is responsible for analyzing the files being edited and create internal structure for describing this ones

  • translation - creates symbol tables and so on
  • generator - generates parser and lexer files based on provided grammar
  • compose_support - allows to connect highlighting to our editing text area
  • Editor - represents a state of a file editor
  • Editors - controls currently open Editors
  • Console - responsible for getting output from build/run/debug
  • ConsoleView - responsible for drawing the aforementioned output
  • ButtonsBar - responsible for drawing bar for buttons
  • ButtonActions - responsible for handling button clicks
  • Calls NPidE's methodsto attach strategies (build/run/debug) to console
  • MenuBar - responsible for drawing bar for menu buttons(top panel)
  • ConfigDialog - responsible for handling menu button clicks and open dialog for project configuration

responsible for storing and reading configuration from YAML-file

  • Config Manager - manage project configuration file
  • LanguageProviders
  • FileDialog
  • FileTree
  • FileTreeView
  • ExpandableFile
  • ProjectChooser - responsible for handling choosing projects
  • ProjectChooserView - responsible for drawing project lists
  • DiskHomeDirectoryRepositoryManager - manage project files on disk
  • BreakpointStorage - responsible for adding/removing breakpoints

Patterns

  • Singleton
  • Proxy
  • Observer
  • Delegation
  • Object pool
  • Factory
  • Strategy

⚖️ License

License-MIT

📕 Authors

Brek Roman Vasilev Pavel Patrushev Borya Tarasov Artёm

🏥 Support

📆 Plans

  • Pair programming

About

A highly customizable IDE written in Kotlin using Compose as an uni NSU team project

Resources

License

Stars

Watchers

Forks

Contributors 4

  •  
  •  
  •  
  •