GithubHelp home page GithubHelp logo

eclipse-theia / theia Goto Github PK

View Code? Open in Web Editor NEW
18.8K 18.8K 2.4K 167.31 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.09% CSS 2.46% JavaScript 1.32% Shell 0.01% Batchfile 0.01% Dockerfile 0.01% Python 0.01% C 0.09% HTML 0.01%
cloud-ide editor electron ide language-server-protocol typescript

theia's Introduction


PRs Welcome Build Status Publish VS Code Built-in Extensions Open questions Open bugs Gitpod Ready-to-Code

Eclipse Theia is an extensible framework to develop full-fledged multi-language Cloud & Desktop IDEs and tools with state-of-the-art web technologies.

Theia

Website

Visit the Eclipse Theia website for more information and the Theia documentation.

Repositories

This is the main repository for the Eclipse Theia project, containing the sources of the Theia Platform. Please open generic discussions, bug reports and feature requests about Theia on this repository. The Theia project also includes additional repositories, e.g. for the artifacts building the Theia IDE and the Theia website. Please also see the overview of all Theia project repositories.

Releases

Scope

  • Support building browser-based and desktop IDEs and tools
  • Provide a highly flexible architecture for adopters
  • Support VS Code Extension protocol
  • Develop under vendor-neutral open-source governance

More details on the project goals are available on the Theia website.

Roadmap

See our roadmap for an overview about the current project goals and the upcoming releases.

Getting Started

Here you can find guides and examples for common scenarios to adopt Theia:

Contributing

Read below to learn how to take part in improving Theia:

Feedback

Read below how to engage with Theia community:

  • Join the discussion on GitHub.
  • Ask a question, request a new feature and file a bug with GitHub issues.
  • Vote on existing GitHub issues by reacting with a πŸ‘. We regularly check issues with votes!
  • Star the repository to show your support.
  • Follow Theia on Twitter.
  • Join the weekly developer call

Documentation

License

Trademark

"Theia" is a trademark of the Eclipse Foundation https://www.eclipse.org/theia

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

Renaming file should focus

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

Status Bar

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

[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.

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)

Streamline scrollbars

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

[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.

Editor Services

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

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.

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

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

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!

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

Shell

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

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.

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.

[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/

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

[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.

[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.

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.

[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

[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 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.

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.

[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:

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.

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.

Keybinding Service

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

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.

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.