Use Monaco for all file/code editing to create unified editing experience
### Problem to solve
At the moment, there are 2 main editors in the product: [ACE](https://ace.c9.io/) and Web IDE (based on [Monaco](https://microsoft.github.io/monaco-editor/index.html)). The ACE editor is used for our single file editing experiences and the Web IDE is used for a more comprehensive multi-file experience. However, due to the differences in the underlying editors the user experience is different depending on which editing path is chosen.
Having two editors also increases engineering effort and issues as bugs may exist in multiple places or for different editors.
### Further details
This epic suggests a precise roadmap to make a move to a unified editing experience based on the Monaco editor and retiring the ACE editor.
Older discussion on this topic was [expressed below](#summary). While there have been multiple paths expressed, there was a path that would have replaced the single file editing experience with the Web IDE in all cases. This is no longer the case and a less ambitious, but more effective solution is suggested of replacing the single-file editor's instances with the same editing engine (i.e. Monaco).
### Proposal
Based on [the Single File Editor Discovery/Design](https://gitlab.com/gitlab-org/gitlab/issues/35379) the proposal is concerned with the following:
* [x] Introduce a set of the new **Feature Flags** that would allow for this to be an iterative *"two-way door decision"*. Each of the "Replace" point below would get a dedicated flag. The flags are **DISABLED** by default
* [x] **Replace** ACE with Monaco for *Snippets* editing/creation
* [x] **Replace** ACE with Monaco for *Blob (files)* editing/creation
* [ ] **Replace** ACE with Monaco for *Set up CI/CD* configuration
* [ ] After testing the move behind the feature flag, the **Feature Flag** is **ENABLED** by default
* [ ] After a testing period, the **Feature Flag** gets **removed**
* [ ] **ACE and dependencies** are **removed** from the codebase
### Future Ambitions
As the next batch of operations, it should be noted that in the course of real unification of the editing experience across the product, the following instances should be revised to evaluate a possibility of replacing the custom-made solutions for Markdown editing in these with the new single-file editing experience, based on Monaco:
* Issue creation/editing
* MR creation/editing
* Epics creation/editing
* Wiki
### Documentation
<!-- See the Feature Change Documentation Workflow https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html
Add all known Documentation Requirements here, per https://docs.gitlab.com/ee/development/documentation/feature-change-workflow.html#documentation-requirements
If this feature requires changing permissions, this document https://docs.gitlab.com/ee/user/permissions.html must be updated accordingly. -->
Documentation updates should be made to reflect workflows that specifically rely on ACE features and impacts that switching to Monaco have on them.
### Availability & Testing
<!-- What risks does this change pose to our availability? How might it affect the quality of the product? What additional test coverage or changes to tests will be needed? Will it require cross-browser testing?
Please list the test areas (unit, integration and end-to-end) that needs to be added or updated to ensure that this feature will work as intended. Please use the list below as guidance.
* Unit test changes
* Integration test changes
* End-to-end test change
See the test engineering planning process and reach out to your counterpart Software Engineer in Test for assistance: https://about.gitlab.com/handbook/engineering/quality/test-engineering/#test-planning -->
Extensive updates to tests across GitLab that interact with the editors will need to be modified to use the new Monaco based experience. Particularly during the period where both editors exist and are varied using a feature flag testing may be problematic.
<details>
<summary>Original Description</summary>
##### Summary
The Web IDE is now stable and reasonably feature complete. We should aim to have a single editing experience for files in GitLab (e.g. where [Ace](https://ace.c9.io/) is currently used) so that there is consistent experience and less duplicate code.
### Proposal
- **Reduce time to edit file**
UX research indicated people like that the ACE editor is very fast to launch and edit the file they are looking at. Currently the Web IDE can take over 10 seconds to load.
We should optimize the launch time of the Web IDE towards making the file editable as fast as possible, rather than loading the tree view first.
- **Workflow**
How do the Ace edit workflows compare to the Web IDE workflows? Are they comparable or are their UX problems that need to be resolved.
- **Completeness**
File templates are now supported in the Web IDE https://gitlab.com/gitlab-org/gitlab-ce/issues/47947 which is the last known functionality gap.
### Links / references
</details>
epic