eclipse-langium / langium

Next-gen language engineering / DSL framework
https://langium.org/
MIT License
663 stars 61 forks source link

Split generated yeoman project into npm workspace #1495

Open msujew opened 1 month ago

msujew commented 1 month ago

After https://github.com/eclipse-langium/langium/pull/954, the setup of the yeoman project has become a bit complicated. Trying to use @vscode/vsce to package a vsix file doesn't work natively due to the inclusion of a custom vscode dependency.

Splitting the generated yeoman project into web/language/extension would have a lot of benefits and make features such as https://github.com/eclipse-langium/langium/issues/1487 easier as well.

Yokozuna59 commented 1 month ago

Is this the desired output if all options are selected?

.
├── .vscode/
│   ├── extensions.json
│   ├── launch.json
│   └── tasks.json
├── packages/
│   ├── cli/
│   │   ├── bin/
│   │   │   └── cli.js
│   │   ├── src/
│   │   │   ├── cli-util.ts
│   │   │   ├── generator.ts
│   │   │   └── main.ts
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── extension/
│   │   ├── src/
│   │   │   ├── extension-browser.ts
│   │   │   ├── extension.ts
│   │   │   ├── main-browser.ts
│   │   │   └── main.ts
│   │   ├── .vscodeignore
│   │   ├── esbuild.mjs
│   │   ├── language-configuration.json
│   │   ├── package.json
│   │   └── tsconfig.json
│   ├── language/
│   │   ├── src/
│   │   │   ├── language/
│   │   │   │   ├── hello-world-module.ts
│   │   │   │   ├── hello-world-validator.ts
│   │   │   │   ├── hello-world.langium
│   │   │   │   └── index.ts
│   │   │   └── index.ts
│   │   ├── test/
│   │   │   ├── linking/
│   │   │   │   └── linking.test.ts
│   │   │   ├── parsing/
│   │   │   │   └── parsing.test.ts
│   │   │   └── validating/
│   │   │       └── validating.test.ts
│   │   ├── langium-config.json
│   │   ├── package.json
│   │   ├── tsconfig.json
│   │   └── tsconfig.src.json
│   └── web/
│       ├── src/
│       │   ├── setupClassic.ts
│       │   ├── setupCommon.ts
│       │   └── setupExtended.ts
│       ├── static/
│       │   ├── monacoClassic.html
│       │   ├── monacoExtended.html
│       │   └── styles.css
│       ├── index.html
│       ├── package.json
│       ├── tsconfig.json
│       └── vite.config.ts
├── .eslint.json
├── .gitignore
├── langium-quickstart.md
├── package.json
├── tsconfig.json
└── vitest.config.ts
msujew commented 1 month ago

@Yokozuna59 Yes, exactly :)

kaisalmen commented 1 month ago

@Yokozuna59 I want to take care of this and update to monaco-editor-wrapper v5 along. Does that sound good to you?

Yokozuna59 commented 1 month ago

@kaisalmen Absolutely.

spoenemann commented 1 month ago

Shall the workspace split be an option so users can choose?

msujew commented 1 month ago

@spoenemann I'd argue that unless it's a pure language project, it's always preferable to split the project into multiple workspaces. Even just with Langium+VSCode.

kaisalmen commented 1 month ago

@msujew and @Yokozuna59 in the above structure cli is included in the language package. In yo langium there is a separate question for inclusion of the cli. Doesn't it therefore makes sense to move cli to its own package?

I started working on this today and the first point was to organize the template data directly into packages (git mv is your friend) . This eases the overall process that's also why my vote is to put cli into a separate package.

Yokozuna59 commented 1 month ago

In yo langium there is a separate question for inclusion of the cli. Doesn't it therefore makes sense to move cli to its own package?

Initially, I thought of the same thing, but @msujew said:

Splitting the generated yeoman project into web/language/extension... (from https://github.com/eclipse-langium/langium/issues/1495#issue-2295639658)

He didn't mention the cli, so I aligned the output, following this suggestion.


As for me, I would also recommend adding a separate cli package since most packages out there, including you guys, have a separate cli package.

msujew commented 1 month ago

In yo langium there is a separate question for inclusion of the cli. Doesn't it therefore makes sense to move cli to its own package?

Yes, that makes sense 👍

kaisalmen commented 1 month ago

Will do, thanks for the feedback 👍

kaisalmen commented 1 month ago

WIP PR is up. ⬆️ It doesn't work, yet fully. Overall project structure looks good already, though.

aabounegm commented 2 days ago

Hello @kaisalmen, I was starting a new (my first) Langium project when I noticed this issue and PR, and I was wondering if it is worth waiting for the PR to be merged. I see that all of the TODOs have already been checked, so is there an ETA on when it will be ready to use? It just seems like a very useful refactor to include in my project from the get-go.

Yokozuna59 commented 2 days ago

@aabounegm You could use that generator using the PR branch:

git clone https://github.com/eclipse-langium/langium.git
cd langium
git fetch origin refs/pull/1520/head:pr/1520
git switch pr/1520
npm install
npm run build
npm run langium:generate
yo ./packages/generator-langium/app/index.js

Please note that you need to install yo globally:

npm install --global yo
aabounegm commented 2 days ago

@Yokozuna59 yes I realize that, but thanks for providing the commands and saving me the trouble 😁. I guess I was mainly wondering if it's ready yet for me to do that or are more changes expected? I already generated a project (not from the PR) just to explore Langium first, I'm just planning for the actual project after playing around (hopefully really soon, I love Langium already!)