Why NPidE? • Supported languages • Installation • How to create project and build/run/debug it • Functionality • How to add new language? • Architecture • License • Authors • Support • Plans
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
You can look at the languages in this repo
- Clone repository OR you can just download NPidE from release page
git clone https://github.com/nsu-null/NPidE
- Create JAR
gradle jar # or ./gradlew jar
- Execute JAR
java -jar path/to/NPidE-<version>.jar
- Open NPidE then click the button "Add new project" and choose project directory
- Download language package from repo and locate it(recommend to place it in the root of the project)
- Click the buttons "Menu" -> "Config" and write project name, choose configuration file of language - LanguageDistributionInfo.yaml and choose grammar and syntax highlighting files
- Write your code in our IDE(you can create/remove/rename/.. directories, files)
- Again click the buttons "Menu" -> "Config" and write entry point/main class and add all the project files
- Now you can close it and click the buttons "Build"/"Run"/"Debug" create breakpoints ans so on
- 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
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 :)
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
- Singleton
- Proxy
- Observer
- Delegation
- Object pool
- Factory
- Strategy
Brek Roman | Vasilev Pavel | Patrushev Borya | Tarasov Artёm |
- Pair programming