Coder Social home page Coder Social logo

eclipse-theia / theia Goto Github PK

View Code? Open in Web Editor NEW
18.9K 285.0 2.4K 167.49 MB

Eclipse Theia is a cloud & desktop IDE framework implemented in TypeScript.

Home Page: http://theia-ide.org

License: Eclipse Public License 2.0

TypeScript 96.10% CSS 2.46% JavaScript 1.32% Shell 0.01% Batchfile 0.01% Dockerfile 0.01% Python 0.01% C 0.09% HTML 0.01%
ide editor language-server-protocol electron typescript cloud-ide

theia's People

Contributors

akosyakov avatar alextugarev avatar alspaladin avatar alvsan09 avatar amiramw avatar azatsarynnyy avatar benoitf avatar colin-grant-work avatar epatpol avatar evidolob avatar fernandoascencio avatar jbicker avatar jonah-iden avatar kittaakos avatar lmcbout avatar marcdumais-work avatar mmorhun avatar msujew avatar paul-marechal avatar romannikitenko avatar rschnekenbu avatar spoenemann avatar svenefftinge avatar thegecko avatar tolusha avatar tortmayr avatar tsmaeder avatar vince-fugnitto avatar vinokurig avatar westbury avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

theia's Issues

[preferences] Preferences

We should go with json-schema based user preferences.

A plugin should be able to contribute a schema and read the actual preferences.
Different scopes would be good, too.

In addition to good textual support like in vscode, we could provide a graphical editor (similar to atom) as well. For that we could use http://jeremydorn.com/json-editor/

Dialog Issues

For our popup dialog service we need to solve the following issues

  • the dialog should be modal, i.e. not allowing other interaction.
  • the dialog should be always on top
  • we don't want to have a visible, empty container widget added to the main area

Command Palette

A quick access to available commands and other things should be provided.
I like how it can do more then just executing commands in VSCode.

Context Menus

In Electron we want to use native menus, while in browser we want to use the Phosphor ones.
We need to figure out how we can change the context menu in monaco (either disable or hook in through IEditorOverrideServices / IContextMenuService).
Also there needs to be a service that shows the menu according to a mennu-id, it should be used e.g. by the navigator, as well as on the tabs of editors/widgets.

Review runtime dependencies

We should try to enforce as less as possible runtime dependencies:

  • to keep installation process easy
  • to allow extension developers a choice

Editor model is disposed error when programmatically closing the active editor

Happens when closing the active editor from code:

const editor = this.editorService.activeEditor;
if (editor) {
  editor.close();
}

Although the editor closes I can see this error in the console:

textModel.ts:70 Uncaught Error: Model is disposed!
    at Model.TextModel._assertNotDisposed (textModel.ts:70)
    at Model.TextModel.getValue (textModel.ts:361)
    at model-resolver-service.ts:52
TextModel._assertNotDisposed	@	textModel.ts:70
TextModel.getValue	@	textModel.ts:361
(anonymous)	@	model-resolver-service.ts:52

Status Bar

It can be used to display status and open some widgets as terminals and the debug consoles.

[Example] Node/Browser Example

We should have an example application for the Node/Browser architecture.
It will be a node process serving the browser application through http.

[monaco] Integrate with menus / commands

  • The actions provided by monaco should be registered with our CommandRegistry.
  • A context menu for monaco editors should be registered with MenuModelRegistry.
  • monaco context menu should be deactivated and replaced with ours

File System Service

A file system service should allow to navigate and operate on a served file system.

  • For electron it needs to use electron's IPC communication to connect to the main process
  • For node/electron it needs to use a websocket.

Let's look at BrowserFS (https://github.com/jvilk/BrowserFS)

[testing] Research test framework

For writing unit tests we should decide for a testing framework to use.
My requirements would be:

  • short turnarounds / incremental test runs
  • readability / little boiler-plate
  • nice: native support in webstorm for debugging

[filesystem] FS protocol

  • don't use workspace root relative paths
  • use file stats where it is possible instead of paths
  • keep API minimal, functions which can be programmed by usage of the fs API should not belong to fs API but another service on the top of the fs API, like createName
  • instead of just paths, we should return more metadata about file items, so we ca reduce the number of requests.

Shell

In a shell-dompackage we create and expose the shell, which is the root element for the UI.

Search within workspace files: Action / widget

Users need to search the workspace. A "Find In Path" Action should open a search widget in which I can type in text and hit search. The list of matches should be shown below in a tree like fashion.

  • Top level - files
  • Second level - matches within files
    Double click on an item should open and reveal the match.

The view should later allow to do replace as well and should offer some common options like regex, case-insensitivity, whole-word-match. But these additional things should be covered in extra tickets.

The feature will require a specific extension to the FileSystem API, as we obviously don't want to load the contents of the whole workspace into the frontend.

Problems View

A view that can display issues in a list, allowing to double click an item in order to open and reveal the element.

Renaming file should focus

When renaming a file, the existing name should be set in the pop up dialog and be selected and focussed.

Keybinding Service

It should be possible to register keybindings to trigger command handlers, similarly to how the menu service does it.

Extension Mechanism

Theia should be extendable in the following ways.

  • Both the frontend and the backend should be extendable
  • To allow maximum flexibility we will allow extensions to run in the main processes and access everything. Defining APIs and their lifecycle is a separate topic.
  • a user should be able to install and uninstall an extension at runtime

At the core of Theia we use dependency injection (inversify) to contribute functionality to existing hooks and also to provide new hooks. A plugin should contribute an inversify module, that is then just added on start up.

Initial Project Setup

An initial project setup should support the following parts:

  • a node module for the ui (dom).
  • a node module for the backend (node).

Development should allow for short turnarounds for both running tests and running the application.
Things like

  • webpack
  • typescript compilation (incl. sourcemaps)
  • karma

should be configured.

Support storing frontend state

We should provide a storage mechanism that allows any components to load and save their state UI.
HTML5 Local Storage seems appropriate.

Streamline scrollbars

Monaco comes with its own scrollbar. Native scrollbars should be styled similarily.

API Documentation

I would like to start thinking about how documentation will look like. The communication between the frontend and the backend will need to be documented, as well as (at the very least) the APIs that extensions will use.

To reduce overhead, at least in the beginning, I think that this doc should be embedded in the code. It should be possible to generate an HTML version of it for easier browsing.

I'll make some research about the existing and popular documentation systems for Typescript. If you already have some knowledge about that, please share!

Selection Service

A global selection service, should allow providers to emit selection events, listeners to register for such events and clients in general to ask for the current selection.

The form of a selection can vary so the type would be any.

Opener Handler improvements

The OpenerHandler should be enhanced in the following ways:

  • OpenerOptions should provide information about where to open in the shell (main area, left, right, bottom dock)
  • should provide and ID and a label, for 'open with'
  • should have a canHandlemethod

[extensions] Leverage VsCode's extension mechanism

VSCode runs 3rd party extensions in a separate node process. The provided extension API communicates with the main process through an IPC-based protocol.

We should look into supporting the protocol directly, so Theia users could install and run all extensions listed here:
https://marketplace.visualstudio.com/VSCode

Some references:

File Navigator

A widget that adds itself to the left area of a shell and connects to the file system.
It should allow browsing the served file system and opening an editor on double-click.

Editor Services

A general file open service should be exposed and internally open the given text file in a new widget using monaco.

[communication] Json RPC connection

Both the frontend and the backend need to have access to a communication endpoint to send and receive JSON RPC messages and notifications
For now we could go through a websocket connection on both electron and web/node.

[navigator] hook up context menu

The navigator should have a context menu, on which the following actions should be implemented.

  • Delete
  • Cut, Copy, Paste
  • New File
  • New Folder
  • Rename

For rename, new file and new folder the label of an item should turn into an editable text field. The name should be applied on enter. On ESC the initial name should be used.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.