Mini-IDE
for IDELang

IDE Development Course

Andrew Vasilyev

Programming Assignment

Objective

Develop a functional mini-IDE for the IDELang language, encapsulating core text editing, syntax highlighting, error detection, and advanced features of modern development environments.

Core Features

  • Options to manage IDELang files (create, open, modify, save, close).
  • Basic text editing.
  • Display line numbers.

Text Manipulation & Advanced Editing

  • Text selection with visual markers.
  • Cut, Copy and Paste
  • Undo & Redo
  • In-file search and replace mechanism.

Project Model

  • Project explorer/sidebar for IDELang file structure.
  • Context-sensitive actions (New, Rename, Delete).
  • Detect external file modifications.

Syntax Handling

  • Token-category-based syntax highlighting.
  • Syntax error identification and display.

Code Analysis

  • Symbol tables for code elements.
  • Type inference, type checking and type error highlighting.
  • Scope-focused resolve and highlighting of resolve errorse.

Code Navigation & Refactoring

  • Rapid navigation to declarations by symbol's names and by clicking on symbol's usages.
  • Global renaming.

Optional

AI-Driven Features
  • AI-powered error highlighting.
Any feature that you want to implement
  • Control, data flow and abstract interpretation analysys
  • Call graph and interprocedural analysis
  • etc

Rules

Teams may not exceed 2 students.

Existing controls for text editors are not allowed. Implement the text editor from scratch using the graphic API for text rendering.

Parser generators, such as ANTLR, are not permitted. They won't help :)

Project Submission & Evaluation

Submit source code via github.

Defend your project.

Evaluation will be based on:

  • Efficiency & perfomance.
  • Code quality.
  • Scope and nature of features.
  • Creativity

IDELang specification

Introduction

IDELang is an educational programming language designed for the IDE Development course. With a focus on simplicity, it incorporates basic data types, arithmetic and boolean operations, conditional structures, as well as function and procedure definitions.

Data Types

number: Support for integer arithmetic.

							
								var number = 42;

string: Represent textual data.

							
							var greeting = "Hello, IDELang!";
						

bool: Defined as `true` and `false`.

							
var isTrue = true;

Variables

Variables are declared using the `var` keyword, with type being inferred from the assigned value.

						
							var x = 5;
							
							

Arithmetic Operations

Supported operations: +, -, *, /

						
	var sum = x + 10;

String Operations

%: String concatenation

						
	
					var fullName = "Hello " % "World!";

Boolean Operations

Supported operations: &&, ||, !, ==, !=

							
					var bothTrue = (x > 4) && (z == true);
					

Conditional Structures

  • if(condition) { ... }
  • if(condition) { ... } else { ... }

Examples:

							
                    if (x > 10) { y = "Greater"; }
                    if (z) { y = "True"; } else { y = "False"; }
				
			

Loops

While loops: while(condition) { ... }

					
var i = 0;
while (i < 5) {
   i = i + 1;
}

Functions

Functions are defined using the `func` keyword and their return type is inferred based on the type of the returned value.

					
func add(a: number, b: number) 
{
	return a + b;  // Inferred return type: number
}

There can be different functions with same names but different sets of parameters.

Procedures (Procs)

Procedures are introduced using the `proc` keyword and do not return a value.

					
proc display(message: string) {
   ...
}

Print Operation

The `print` operation is used to display output.

					
print("Hello, World!");  // Displays: Hello, World!
print(x);                // Displays the value of x
print(y % " there!");    // Displays: hello there!

Project Structure

  • Project Root: The top-level directory containing all of the project's resources.
    Attributes: Project name, creation date.
  • Source Files: Individual files containing IDELang code.
    Attributes: File name, file path, last modification date, size.
    main.idl, utils.idl

Metadata

Each project should maintain a metadata file (like a `.idlconfig` or `.idlproj`) that holds:

  • Project-related information
  • List of source files and their relative paths.

Questions & Answers

Thank you for your attention!

I'm now open to any questions you might have.