Commit Graph

21 Commits

Author SHA1 Message Date
Ilya Bogdanov
3d38b7174f
Add Write button to component menu (#11523)
Closes #10486

https://github.com/user-attachments/assets/df492946-0c54-481e-8499-992b3ae9e35d
2024-11-13 19:45:32 +00:00
Paweł Grabarz
a83297b7db
Drop git dependency on enso-bot repository (#11539) 2024-11-12 18:25:19 +00:00
Kaz Wesley
867c77d5cc
New markdown editor (#11469)
Implements #11240.

https://github.com/user-attachments/assets/4d2f8021-3e0f-4d39-95df-bcd72bf7545b

# Important Notes
- Fix a Yjs document corruption bug caused by `DeepReadonly` being replaced by a stub; introduce a `DeepReadonly` implementation without Vue dependency.
- Fix right panel sizing when code editor is open.
- Fix right panel slide-in animation.
- `Ast.Function` renamed to `Ast.FunctionDef`.
2024-11-06 16:54:32 +00:00
Kaz Wesley
2b3bd2cc90
Move documentation into documentable types (#11441)
Move documentation into documentable types (implements #11302).

# Important Notes
GUI:
- Distinguish expression and statement
- `Ast.Ast` is still present, as the base class for AST objects. Most references to `Ast.Ast` are now references to `Ast.Expression`. Operations on blocks use `Ast.Statement`.
- `Ast.parse` has been replaced with: `Ast.parseExpression`, `Ast.parseStatement`, and `Ast.parseBlock`
- `syncToCode` is internally context-aware; it parses the provided code appropriately depending on whether its AST is an expression, a statement, or the top level of a module.
- Remove `wrappingExpression` / `innerExpression` APIs: Wrapper types have been eliminated; modifier lines are now fields inside parent types.
- Simplify AST printing:
- Fully implemented autospacing in `concreteChildren` implementations; the type returned by `concreteChildren` now ensures that spacing has been fully resolved.
- Eliminate `printBlock` / `printDocs`: `concreteChildren` is now aware of indentation context, and responsible for indentation of its child lines.
- The `Pattern` type is now parameterized to identify the AST type it constructs. The `Pattern.parseExpression` function helps create a `Pattern<Expression>`.
- Refactor `performCollape` for testability.
- e2e tests: Improve table viz test: It still doesn't pass on my Mac, but these changes are necessary if not sufficient.

Compiler (TreeToIr):
- An expression in statement context is now found in an `ExpressionStatement` wrapper.
- Documentation for a `Function` is now found inside the function node.
- Deduplicate some polyglot-function logic.
2024-11-04 15:33:53 +00:00
Adam Obuchowicz
39c44e7adb
Table Input Widget: Size persistence (#11435)
Fixes #10861

Every widget may set metadata on its AST. Because once widget picker will be implemented a single AST node may have many possible widgets, their settings are kept in a map keyed by their name/key.
2024-10-30 09:34:58 +00:00
Kaz Wesley
33904912ee
Move annotations into fields of Function and ConstructorDefinition (#11374)
Move annotations into fields of Function and ConstructorDefinition.

# Important Notes
New syntax: Constructor argument-definition lines
- Each argument in a type-constructor definition may be specified on its own (indented) line.

Relaxed syntax: Unparenthesized arguments to annotations
- A generic annotation now uses the rest of the line as its argument expression; the expression no longer needs to be parenthesized.
2024-10-23 20:35:06 +00:00
Kaz Wesley
4e4a1e1df2
Move TypeSignature into field of Function (#11364)
Move type-signature lines into `Function` field. Also implements #11293.

Stacked on #11346.
2024-10-22 19:50:14 +00:00
Kaz Wesley
d278ad636c
Replace private modifier node with field on supporting types (#11346)
Eliminate `private` modifier-node: `private` is a field in supporting types, or a single-token node in the case of `private` declarations.

# Important Notes
- Rust parser tests: Switch to a builder-style API for defining expected `Function` ASTs to allow further changes to `Function` fields without rewriting all the tests again.
- TreeToIr: Fix discarded module-level `diag`; add a test that covers module diagnostics.
- Syntax: Disallow `private` methods in function blocks. (Previously this was enforced in the compiler.)
2024-10-22 16:26:00 +00:00
somebody1234
5faddf52f0
Fix ESLint errors, add some docs (#11339)
- Fix ESLint errors
- Add documentation for *some* functions with blank documentation

# Important Notes
None
2024-10-21 12:56:39 +00:00
Kaz Wesley
4d4a2990a0
Distinguish assignment/thunk by statement context (#11324)
Align `Assignment`/`Function` distinction in AST with compiler's implemented semantics:
- The ambiguous case `funcOrVar = expression` is now parsed as a `Function` when in a `Type` definition or in the top level of a module. I.e. it is an `Assignment` in contexts where the RHS is evaluated immediately when the binding is evaluated, and a `Function` in contexts where the RHS is evaluated each time the bound name is evaluated.
- `Assignment` statements now may only occur in function bodies.

Correcting this distinction lays the groundwork for #11302.

Other changes:
- Fixed incorrect source code locations for negative literals and negated expressions.

# Important Notes
New APIs:
- The parser now exposes a `parse_block` entry point, which allows parsing input lines as if in the body of a function. The previous entry point has been renamed to `parse_module`.
2024-10-18 17:54:55 +00:00
Adam Obuchowicz
a45e233f03
Table widget: reordering rows and columns (#11271)
Fixes #10759

[Screencast From 2024-10-14 13-51-24.webm](https://github.com/user-attachments/assets/372c6f1b-8281-4bdc-9f46-fa90c3e32764)

# Important Notes
In this task, I also fixed some badly looking spacing after editing vector.
2024-10-17 07:49:01 +00:00
Adam Obuchowicz
4a249688e8
Unify Frontend App (#11287)
Fixes #10668
Fixes #8484

Summary of changes:
* `gui2` and `dashboard` are merged to `gui` directory. Various configs were merged (package.json, playwrigth, TS...). The src and e2e directories are split to `dashboard` and `project-view` for now.
* E2E tests run two servers on different ports. The tests are organized in projects. This is also to be changed soon, as we plan to [use better mocking in GUI/ProjectView](#9726)
* ESlint configs were merged to central `eslint.config.mjs`, and that file was moved to repository root. We kept the dashboard lints, but they can be relaxed. The dashboard code was changed to meet GUI lints.
* Also, the versions of linter plugins were bumped, and code fixed.
* The ide-desktop/client no longer has `dashboard` dependency - the only type used there was moved to common package.
* `common` package moved to `app`.
2024-10-11 18:23:02 +00:00
Ilya Bogdanov
eea23b178e
Input nodes (#11165)
Closes #10696

https://github.com/user-attachments/assets/1163a288-7b91-462d-9774-beaf4fc34416
2024-09-30 21:20:08 +00:00
Adam Obuchowicz
3941634036
Table Widget: removing columns and rows (#11151)
Fixes: #10758

[Screencast from 2024-09-23 13-19-31.webm](https://github.com/user-attachments/assets/aa28708e-f4c9-400a-966d-1d82abe99f1e)

# Important Notes
To add custom options, I needed to bump AGGrid version. But not the newest one, as it made some bugs I failed to fix.
2024-09-23 14:24:40 +00:00
Adam Obuchowicz
414eee0b48
Fix initialization after reconnecting (#11014)
Fixes #10948

The problem was in the binary reconnecting: we sent the first "initProtocol" message, but the connection was reset, and then we try to initialize again. While looking good, the problem was that the party websocket we use queued the first initProtocol message and re-send it by itself on reconnect. Our initProtocol was also sent, but it did not get any response, blocking any further request like `writeBytes`.
2024-09-09 13:49:03 +00:00
Paweł Grabarz
6bfdda33a9
Do not crash on empty main function body. (#10990)
Fixes #10976

https://github.com/user-attachments/assets/00b2279d-2acf-468b-8c3c-aa6885cba23d


Addressed issue of empty body block being incorrectly "repaired" into an empty group, geneating invalid `()` syntax. Appending nodes to an empty function now actually replaces its body block, instead of creating a temporary orphan body block node.

Note that empty main function is still considered an error on the engine side, but it doesn't impact the IDE in negative way. Things work again as soon as a node is inserted.

Also fixed a few issues causing hot-reloading to break. Now edited AST code properly hot-reloads all affected modules without breaking the app.
2024-09-06 18:45:20 +00:00
Kaz Wesley
27f7d14140
Fix collapsed function renaming (#10884)
Fix #10763 and related issues:
- Fix bug preventing `WidgetFunctionName` from matching
- Fix missing icon when `WidgetFunctionName` matches
- Add testing for `WidgetFunctionName`
- Fix `WidgetFunctionName` padding
2024-08-28 11:05:19 +00:00
Kaz Wesley
582b7f9a2e
Fullscreen improvements (#10876)
Implements #10686.
- Add fullscreen modes to doc editor and code editor
- Contain fullscreen view within graph editor tab
- Prevent persisting or synchronizing fullscreen state
- Animate transition

https://github.com/user-attachments/assets/e88801c2-8c56-494b-8500-95fbd76c4322
2024-08-23 13:00:44 +00:00
Kaz Wesley
b442a38894
Reactive Asts (#10777)
Reactively track reads of fields of all `Ast` objects residing in the `graphStore`'s `syncModule` (i.e. the committed module state). Tracking includes reading the `parent` field of a node.

Note that non-`Ast` structured fields (e.g. `ArgumentDefinition`) are not themselves reactive--an access is tracked when obtaining the object from the `Ast`, not when accessing the inner object's fields. Structured fields are low-level, and mostly not exposed outside `Ast`, so I don't think transitively proxying them would be worth the overhead.

Implements #10697.
2024-08-16 16:35:48 +00:00
Adam Obuchowicz
6eece5f8d6
Table Editor Widget (#10774)
Fixes #10293

The Table Editor Widget allows adding rows and columns, editing cells and renaming columns.

[Screencast from 2024-08-07 13-17-37.webm](https://github.com/user-attachments/assets/d2e708b5-6516-4107-bc17-f018e455c111)

# Important Notes
* The parts of Table Visualization which were useful for the widget were put in vue component. On this occasion, we use aggrid vue.
2024-08-12 14:45:58 +00:00
Paweł Grabarz
b286adaae4
Split ydoc server into separate module (#10735)
# Important Notes
The command to run the gui dev environment has been changed. Invoking the old command will print a message about that.
From now on, use `pnpm dev:gui2` in repository root.
2024-08-08 12:12:05 +00:00