JScript IntelliSense in Visual Studio Orcas

JScript IntelliSense in Visual Studio Orcas

Rate This
  • Comments 96

The March CTP of Visual Studio marks the debut of a much-requested and long-awaited feature: improved JScript IntelliSense.  We’ve been working on this for almost a year now and I’m pretty excited to finally be able to share it with the public.  There are a variety of topics I’d like to deep dive into, but for today let’s just take a quick aerial tour of the new features.

1. Proactive Completion List

Our old list was a bit lazy and only “awoke” when you typed a period while accessing a member.  Our new one is on-its-toes and is wired up to the language grammar.  Net effect: it comes up when you would expect it, and you can spend less time pressing ctrl+J. =)

2. Keywords in Completion List

In practice, you will spend half of your time typing keywords.  Now they’re part of the list.

3. ASP.NET AJAX Concepts in Completion List

We have new glyphs corresponding to objects and functions that have registered themselves as ASP.NET AJAX Namespaces, Classes, Interfaces, Properties, Enumerations, etc.  Since lists are usually long, this is particularly useful for quickly discovering that particular member you’re looking for.

The glyphs are aligned with the ones you would see in managed programming.  Vanilla fields and functions are now just marked as blue and magenta boxes respectively.

4. IntelliSense from Script Libraries for ASPX Pages

The cornerstone feature is the new ability to see objects and functions declared in external script files.  Note below that $addHandler was not defined in the current document:

How do we know which files you’re referencing?  We look for Script Managers (and Proxies), and infer what scripts it will bring into the page:

We look for the normal HTML script reference tags:

We also take into account any Master Pages that may contain any of the above.

5. IntelliSense from Script Libraries for JS Files

The example above works great for pages, but what if you’re in a JS file?  Since there’s no standard syntax, we decided on the following XML comment syntax (which you’ll see a parallelism in the next section):

The above declaration simply states that the current JS file should display IntelliSense including objects and functions declared in JScript1.js.  The following declaration references a script library embedded within an assembly (note the subtle usage of “name” instead of “path”):

If the “assembly” attribute is left out, we assume it to be the System.Web.Extensions assembly.  This keeps standard references to ASP.NET AJAX scripts succinct.

It’s worthwhile to remember that these declarations must be found at the top of the page before any script or any regular comments.  Additionally, these declarations are not used during the runtime in any way—they are for the editor only.

6. Enhanced Function and Parameter Tips

Function and parameter tips now have the ability to show ASP.NET AJAX type information as well as summaries.  This should help minimize context-switching when looking for documentation.  Tips appear both from the completion list:

…and underneath the function as you’re typing:

Where is this information coming from?  The editor simply reads the XML comments from the source code:

ASP.NET AJAX employs a XML documentation comment scheme akin to the .NET XML Documentation Comments.  As long as your sources are commented, we leverage them to display the additional information.  ASP.NET AJAX scripts and AJAX Control Toolkit scripts come in commented flavors.  For older files that don’t have these comments, we will still show at least the function name and parameter names.

7. Type Inferencing

A foundational feature enabling much of the IntelliSense is our ability to infer types across assignments between JScript variables—which are inherently type-less.  The JScript Team, our partner team, has a great post on this topic.  I’ll defer the discussion of this feature to them.

Summary

JScript IntelliSense is a (purposefully) subtle set of features.  I hope this introduction spotlights some of the functionality you might otherwise have missed and gets you up and running.  I’ll blog in more depth later.  For now, have fun playing with the March CTP and let us know what you think!

Jeff King
Program Manager
Visual Studio Web Tools

Leave a Comment
  • Please add 1 and 1 and type the answer here:
  • Post
  • This is an absolutely awesome feature. IntelliSense / autocompletion for JavaScript is a difficult problem

  • This is really great to see! http://blogs.msdn.com/webdevtools/archive/2007/03/02/jscript-intellisense-in-orcas.aspx

  • This is an absolutely awesome feature. IntelliSense / autocompletion for JavaScript is a difficult problem

  • I am REALLY looking forward to this.

    Will the functionality be included in the "express" version as well?  If the free tools establish an industry leading JavaScript IDE right now while AJAX is so popular, I think it would win a lot of new developers over to .NET.

  • Hi Dave,

    Yes all of the new functionality for JScript Intellisense will be in VWD Express "Orcas" as well.

    Glad you like it!

    Omar Khan

    Group Program Manager

    Visual Studio Web Tools

  • Awww yeah.  That's the shiznit.

  • Fantastic to see this feature in Orcas.  I can't wait to try this out.

  • How does the intellisense functionality cope with private members, properties and fields? (ie prefixed with underscore). Are there any other prefix characters for "internal to a component" scoping? How about public fields? What happens if a member is added dynamically to the object hashtable? ie myclass.prototype["mymethod"]=function() {...};

  • Yesterday I listed ASP.NET AJAX as one of the technologies discussed. During my talk I mentioned that

  • Hi Rbirkby,

    ASP.NET AJAX registered components that are in external files will automatically have their private members (those with an underscore prefix) hidden.  Those not registered or in the current file will have no hiding.

    Members added to the object hashtable in lines of code that are executed will be seen as part of the object.  Those that are added inside the file usually will not (there are certain cases that will work depending on how and where you declare it).

    Of course, what I'm describing is the intended design.  The Feb CTP is just a preview and there may be bugs may change this behavior.

    HTH,

    Jeff

  • Looks good!

    I don't know if comments for your editor are such a good idea. Can't you keep a list of all js resources in the solution? The comment loses all value when the file is not viewed in Visual Studio.

    Also, how wel does the intellisense work with other JS libraries? These usually have other ways of implementing namespaces (if at all) and many of them use jsdoc for their comments. So will you be able to see that in intellisense as well? (Hint: Aptana looks to be really good in doing that.)

    Keep up the good work!

  • I just read this over on Jeff's blog about Javascript Intellisense in the March CTP. Awesome...........Url:...

  • I just read this over on Jeff's blog about Javascript Intellisense in the March CTP. Awesome...........

  • All those comments will make larger js libraries.

  • Hi Steve,

    It's true those comments will make larger libraries.  I would recommend keeping a set of "release" scripts (compressed, obfuscated) and a set of "debug" scripts (fully commented, formatted).  If these's scripts are referenced via the Script Manager, we will automatically look for the debug versions of the script (via the extention .debug.js).

    HTH,

    Jeff

Page 1 of 7 (96 items) 12345»