This project is a part of the paper The Ultimate Conditional Syntax for OOPSLA 2024 Artifact Evaluation.
This project follows the structure of a modern web frontend project. According to their functions, they can be classified as follows.
- UI components:
components/**/*
. - Configurations for the build tool:
vite.config.js
. - Type annotations:
@types/*.d.ts
,vite-env.d.ts
. - Container:
Dockerfile
,.dockerignore
. - Editor-related configurations:
.vscode/*
. - HTML template:
index.html
. - Tailwind CSS configurations:
tailwind.config.ts
,postcss.config.js
.
The main code that makes up the web demo is in the lib
folder. The purpose of the file inside is as follows.
lib/codemirror
: Themes for CodeMirror.lib/examples
: The source of code examples.lib/mlscript
: MLscript language support for CodeMirror.lib/store
: Each file represents a store of states used throughout React components.lib/tutorials
: The source of tutorials for MLscript.lib/utils
: Some utility functions.
This project uses the following external dependencies, which are used only for creating the web demo. The core algorithms of the artifact and the paper are not implemented by these external dependencies.
- React: Build web interfaces in a functional way and provide the management of state and effects.
- Vite: The build tool and development server.
- CodeMirror: An extensible code editor component.
- Lezer: A incremental parser framework used by CodeMirror.
- jotai: Advanced state management for React.
- Tailwind CSS: The CSS framework.
- Zod: Type validation for JavaScript values.
- Radix UI: A collection of UI components.
The remaining dependencies are purely utility, such as nanoid
, pluralize
, etc. These will not be elaborated here. People can check the package.json
file to see all dependencies.
Apart from the libraries mentioned above, there are also some resource dependencies.
- Fonts: Inter and JetBrains Mono.
- Icons used in this project are provided by library Lucide and Tabler Icons.