Skip to main content
Jump to: navigation, search


JavaScript Development Tools


JSDT is included with WTP 3.0 and above.

The JavaScript Development Tools (JSDT) is a JavaScript IDE for Eclipse based on the Java Development Toolkit (JDT). It is our goal to make JSDT the most accurate JavaScript IDE while still keeping it very fast. Since JSDT's foundation is in the JDT, many of the rich editing features of the JDT carry over, as well as its facilities for smart error detection and correction, detailed flow analysis, pluggable content completion, and its flexible AST for use by plug-in developers. The end result is a fast, feature-packed JavaScript IDE and extensible framework that's well suited for AJAX and other JavaScript development needs.

JSDT is part of the Web Tools Platform Source Editing subproject.


With the advent of Web 2.0, JavaScript have become central in the creation of a richer user experience on the Web. Its use has shifted from the creation of simple functions and events handlers to the creation of complex Web Application frameworks. Such complexity made it crucial that a more sophisticated set of tools become available on Eclipse.

JSDT's goal is to develop an IDE for JavaScript applications, with full support for editing, search, and refactoring. The functionality of the JavaScript Development Tools is heavily based on the functionality of the Java Development Tools, but since JavaScript is not a fully typed or class-based language, it is not possible to provide 100% of the JDT functionality. JSDT is extensible in that it can be (is) plugged into the HTML and JSP editors within WTP as well as being architected with pluggable type inference and completion proposals in mind. The inference engine is used to determine type and class structures from the JavaScript code, enabling as much of the JDT equivalent functionality as possible, while still allowing adopters to contribute to the process for atypical or extended scenarios.


Pure JavaScript Source

  • Syntax Highlighting
  • Folding / Line Numbers
  • Full Outlining showing Classes, Functions and Fields
  • Highlight and check of matching bracket / parenthesis
  • Auto-complete of brackets, parentheses and indentation
  • Marking of Occurrences
  • Comment Toggling (both line and block)
  • Generation of element JSDoc
  • Smart Code Completion based on a real-time JavaScript Model
  • Hover Help that displays element declaration with JSDoc or Error message
  • Configurable Error/Warning checking including full language syntax and type/class structure resolution
  • Flow analysis showing unreachable code, unused variables and variable hiding.
  • Quick-fixes for unresolved fields and types.
  • Surround with for do, for, try/catch, and while constructs
  • Completion Templates
  • Extract Function/Change function signature
  • Indentation Correction
  • Open Declaration
  • Open Type Hierarchy
  • Open Call Hierarchy
  • Extensible and customizable Code Formatting
  • Full Search
  • Refactor/Rename/Move
  • Support for Breakpoint marker display if a debugger is present (see ATF)
  • Browswer libraries with JsDoc for FireFox, Internet Explorer and ECMA 3
  • Support for user defined libraries using JsDoc + Javascript prototype structure definitions
  • Full extension support for Library UI and core
  • Library Image Support
  • Breakpoint and ATF Project Support for easy AJAX Integration and debug

HTML/JSP Embedded JavaScript

  • Syntax Highlighting
  • Folding / Line Numbers
  • Full Outlining showing Classes, Functions and Fields
  • Highlight and check of matching bracket / parenthesis
  • Auto-complete of brackets, parenthesies and indentation
  • Mark Occurrence
  • Generate Element JsDoc (From outline)
  • Smart Code Completion based on real-time Javascript Model
  • Hover Help that display element declaration and JsDoc or Error message
  • Configurable Error/Warning checking includes full language syntax and type/class structure resolution
  • Flow analysis shows unreachable code, unused variables and variable hiding.
  • Completion Templates
  • Indentation Correction
  • Open Declaration (From outline)
  • Open Type Hierarchy (From outline)
  • Open Call Hierarchy (From outline)
  • Extensibly customizable Code Formating
  • Full Search
  • Breakpoint Support
  • Browswer libraries with JsDoc for FireFox, Internet Explorer and ECMA 3
  • Support for user defined libraries using JsDoc + Javascript prototype structure definitions
  • Full extension support for Library UI and core
  • Library Image Support
  • Breakpoint and ATF Project Support for easy AJAX Integration and debug


The JavaScript Development Tools design would use the JDT design with the necessary adjustments made for JavaScript.

As far as the JavaScript Development Tools design is concerned, the major differences between Java and JavaScript are:

  • Javascript has no explicit typing support, whereas in Java everything is typed, and incorporates argument types in function signatures.
  • At the top level, a JavaScript file can contain any program statement, whereas a Java file only contains a Class.
  • JavaScript has no classpath/jar file concept

Other areas where the java/JavaScript differences will necessitate changes:

  • syntax differences - parse definitions
  • additional program elements with no correspondence in Java
    • object literals
    • for (var in collection)

Inferred Types

In order for some JDT-based functionality (such as code completion) to work correctly, class type information needs to be available. This information is not available in JavaScript, but it can be inferred in many cases. A type inferring framework has been put in place to support this functionality, examining the JavaScript Abstract Syntax Tree (AST) and generating "virtual" class information. Type inferring is extensible, so the unique conventions among various JavaScript Toolkits (e.g. Dojo, jQuery, Prototype, etc.) can be handled, although through WTP 3.1 it has remained provisional. Inferred types may participate in refactoring, but their visibility within the UI is still being discussed.

JavaScript file handling

Java files have a very top down structure, where files only contain classes, which only contain fields, methods, and inner classes, and program statements only contained within methods. Because of this, some JDT functionality will not work for JavaScript, because a program statement can be directly at the top of a JavaScript file. The relevant JDT code is still undergoing refactorings to support these scenarios.

Variable/function resolution

In Java, everything is resolvable because of the classpath, package structure, and import statements. This has no correspondence in JavaScript, where functions themselves may also be resolvable as types.


The JSDT mimics the JDT Java Build Path and classpath container mechanisms to offer JavaScript library support. JSDT libraries are collections of JavaScript source files that have prototyped object/class definitions and JSDoc. The inference engine then models these libraries and places each object/field/function in the projects Global Scope, making them available to every JavaScript file in the project. Because the library contents are not directly executed by JSDT, it isn't necessary for them to contain the complete implementation of those objects. In fact, the standard JavaScript runtime is itself presented as a source file containing stubs for the specification's contents. Bindings for nonstandard and future runtimes are similarly easy to create and use.

To illustrate-- the JSDT contains a FireFox library plugin with about 150k of JavaScript and JsDoc. This library represents the class structure within the FireFox browser that is accessible to a web page's JavaScript, but does not contain any implementation to the functions it declares. If a user wishes to target their JavaScript source to FireFox specifically, they would add the FireFox library to their project and gain content completion and hover help for the FireFox objects. Users may also limit the objects/functions/fields visible in the project by adding or removing libraries.

Libraries aren't limited to browser objects. AJAX runtimes can fit nicely into libraries, as would a website's standard set of utility functions. Really the possibilities are limitless. And the library mechanism is extremely easy to expand both by the end-user or through extension points.

Functionality mapping

This table shows how the JDT functionality corresponds to the JavaScript functionality. It does not include anything where there is a direct one to one correspondence.

JDT function JSDT function
Build path Libraries + Global Scope (frequently referred to as an "Include Path")
JDK level (1.4 vs 1.5) ECMA script level 3 vs 4 (v.3 supported now, v.4 will not be implemented as the specification was not abandoned)
Compile Validation & flow analysis

Extension Points

The JSDT functionality is embeddable. This means, for instance, that the JavaScript editing capabilities is embeddable within HTML and JSP Editors, both within script tags, and script attribute values. The JSDT is flexible so script support in other languages is possible using translator interfaces being planned for WTP 3.1.

The following JSDT extension points are supported :

  • Global Scope variable initializer
  • Global Scope container initializer core
  • Code formatter
  • Validation participant
 Currently the JSDT is represented in an AST.

The following jsdt.ui extension points will be supported :

  • Global Scope container initializer ui (Wizzard, content assist images and type/text naming)
  • javascript element filter
  • javaScriptEditorTextHovers
  • jsdocCompletionProcessor
  • quickFixProcessors
  • quickAssistProcessors
  • foldingStructureProviders
  • queryParticipants
  • javaScriptCompletionProposalComputer
  • javaScriptCompletionProposalSorters


Contributing to JSDT

The JSDT is driven by a very small development group with limited resources. ANY serious developers or contributors will be enthusiastically welcomed. For more information follow the standard Eclipse process for becoming a project committer (see New Committer Election). For more information contact Nitin Dahyabhai or Christopher Jaun

Developing JSDT

Developing JSDT

JSDT Functional Testing

Testing Scenarios

Reporting Bugs

Report bugs through Eclipse Bugzilla under Webtools catagory, Source Editing product, component wst.jsdt.

Here is a list of open JSDT bugs. We're working through them as fast as we can!

Back to the top