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