Adding custom JavaScript scripts to intellisense - visual-studio

I am using Visual Studio 2010 with Resharper plugin and my web application is heavy on JavaScript.
By that I mean there is a lot of libraries (knockout.js, jQuery, jQuery UI - to name a few).
While intellisense works alright in C#, I'm having a hard time to start it working for JavaScript. I've tried googling and going through options, preferences and docs all through out the holidays, but seems that I'm searching for something that just isn't there.
So by example there's a class in knockout.js "ko.utils", which has methods like "ko.utils.arrayMap". My question is, how can I make intellisense (of either R# or VS) index this class and offer me methods when I type "ko.utils.", hence speeding up my development in JavaScript?
Note: Possible to get custom javascript files to have intellisense in VS 2010? this is not a duplicate I think, because it is seldom for these libraries to have a special VSDoc script here and if they had one, I still couldn't refere it globally.

You can create a ReSharper plugin to extend the code completion mechanism to provide the features you need. What you'd have to do is analyze the parsed structures yourself, derive the relevant content to be added to completion lists, and inject it when necessary.

Related

Visual Studio 2010/Resharper Plugin development

I am having trouble tracking down information regarding extending Intellisense. It looks like creating a plugin for VS 2010 or Resharper would do the trick. However, I can't find any documentation for adding items to the intellisense dropdown.
This post got pretty close: How to extend IntelliSense items?
But I couldn't find any documentation for the interfaces or classes being used.
What I am trying to do is to read from an XML file, and add those tags as part of the results that show up in intellisense in the C# code (not in XML).
The part of the R# Plugin Development Guide concerning Code Completion (i.e., IntelliSense) is on our todo list but has not yet been written. When done, it should be available here. While we're working on that, feel free to email me dn at jetbrains dot com, and I'll try to help you out with any queries you might have.

How to extend IntelliSense items?

I would like to manually extend the IntelliSense list by various items. I want to be responsible for the action triggered by the item (i.e. code completion and tooltip info). It doesn't matter what items.
Is this possible with an VisualStudio add-in, ReSharper / DXCore or any otherg plugin?
Background:
Some of you may know FOP (feature-oriented programming). FOP would require various changes to intellisense and editor behavior.
Edit:
Another interesting post.
This is definitely doable very easily by writing a ReSharper plugin.
Start by implementing ICodeCompletionItemsProvider which will provide additional IntelliSense items. The easiest way is to inherit from ItemsProviderOfSpecificContext<TContext> (with TContext being CSharpCodeCompletionContext if you're interested in C# code completion).
Your provider will add the additional items in the implementation of AddLookupItems(). You have the chance to provide a custom implementation of ILookupItem here: the Accept() method of this interface will be called when the user chooses the item in the completion popup. Here is your chance to execute the code you need.
Note that this information is for R# 6.1/7.0. I don't think it is much different in previous versions though. Obviously, you have to enable ReSharper IntelliSense instead of Visual Studio IntelliSense for this to work.
Customized intelliSense for VS2010 XML editor can be added by putting customized xsd files in C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas folder but I guess you are looking for something more.
You should take a look at Creating and Using IntelliSense Code Snippets and decide whether it is what you are looking for. This question on programmers.stockexchange might also be helpful. This question also seems similar which suggests CSharpIntellisensePresenter(Free).
Maybe ReSharper's Live Templates can help you (ReSharper->Live Templates...).

Visual Studio 2008 Intellisense Priority Settings

Is there someway to get VS 2008 intellisense to default to Properties over Classes in a name collision?
Example:
Within my scope I have a property Foo, but I'm also using a class Foo. When writing code, if I start to type F o, VS2008 intellisense will think I mean the class Foo. I want it to think I mean the property Foo instead.
Unfortunately no this is not possible. Customization of the priority of value categories like classes / properties is not supported
There is no possibility in VS2010 and not even in ReSharper 5.0 to deal with this issue. It won't be a feature of ReSharper 6.0 as well, according to JetBrains. I use a different name for the property, when it starts making me aggressive and refactor it after I've done most of the work.
Update:
I reported the issue to JetBrains some time ago and I just got an eMail that the feature has been added and will be available in Release 6.1. So good news for ReSharper users on this one!
http://youtrack.jetbrains.net/issue/RSRP-273067?projectKey=RSRP
I was thinking the exact same thing today.
While the functionality is not in vanilla VS, it is quite possible to modify some code to add this functionality. For example, the XAML Presenter, probably named after the presenter component that you have to modify does something similiar.XAML Presenter
It narrows by namespace and sorts by attribute type. Basically, I'm just gonna take the list the Intellisense Completion Source gives and sort the list. Sounds simple enough.
More challenging is implementing the UI controls. I hate designing UI controls . . .
Edit:
However, I don't forsee a way to do this without breaking Resharper's Intelllisense features.
Use VS 2010, I suppose? I can't see which situation would make VS put classes over properties, though.

Customize VisualStudio syntax highlighting even more

I am wondering if it is possible to set VisualStudio IDE so it highlights private/protected/public variables of the class differently as well as change formatting on locals (i.e. variables that are either passed in or declared inside a function, like this).
I did not find any such options in the normal Fonts and Colors menu of VS. Also a search on SO reveals that (at least as of 2 years ago) only add-ons provide such features. But is there a way to manually edit some file? Just because we don't get a nice UI to edit, doesn't mean underlying framework automatically doesn't support it. I mean add-ons have to plug into something to do their magic in the editor. Any insights into this issue?
Thanks!
EDIT: I have found the following information on MSDN Syntax Highlighting (Managed Package Framework). But the explanation/examples given are woefully inadequate. Does anyone know of a more extensive docs/tutorials/etc. for MPF?
I could be wrong (probably am) but I think plugins that do what you want replace the default highlighter in Visual Studio, so I don't think there is a file you can edit. As far as I know, you need a plugin. ReSharper might do this...I'm not sure though (I don't use it)

Is it really worth purchasing R# for VS2010?

I heard that R#5.0 (still in beta) will support VS 2010. My question is
VS2010 == VS2008 + ReSharper ?
I know there are many improvements to VS2010, so I 'm not sure weather is it really worth purchasing the R#5.0 for VS2010?
Well, I haven't explored VS 2010 new refactoring features that much, but its my understanding that VS has some but definitely not all of resharpers features implemented (From MSDN):
Navigate To
You can use the Navigate
To feature to search for a symbol or
file in the source code.
Navigate To lets you find a specific
location in the solution or explore
elements in the solution. It helps you
pick a good set of matching results
from a query.
You can search for keywords that are
contained in a symbol by using Camel
casing and underscore characters to
divide the symbol into keywords.
For more information, see How to:
Search for Objects, Definitions, and
References (Symbols).
Generate From Usage
The Generate From
Usage feature lets you use classes and
members before you define them. You
can generate a stub for any undefined
class, constructor, method, property,
field, or enum that you want to use
but have not yet defined. You can
generate new types and members without
leaving your current location in code,
This minimizes interruption to your
workflow.
Generate From Usage supports
programming styles such as test-first
development.
IntelliSense Suggestion Mode
IntelliSense now provides two
alternatives for IntelliSense
statement completion, completion mode
and suggestion mode. Use suggestion
mode for situations where classes and
members are used before they are
defined.
In suggestion mode, when you type in
the editor and then commit the entry,
the text you typed is inserted into
the code. When you commit an entry in
completion mode, the editor shows the
entry that is highlighted on the
members list.
When an IntelliSense window is open,
you can press CTRL+ALT+SPACEBAR to
toggle between completion mode and
suggestion mode.
So I guess it would depend on which of Resharpers features you want to use. If you are satisfied with the above which is certainly great improvements, then you don't need Resharper.
On the performance question, well it might perform better because of tighter integration.
Personally the above leaves me still needing a lot of features like (just the ones i can think of right now - might be more):
There are as far as I can tell only about 6 refactorings, where resharper currently has more than 30
No import type completion, which i use ALL the time. One shortcut adds to references and adds import statement
No smart completion
Change namespace to follow navigation structure and update all references with one shortcut
Goto is more advanced in R# you can go to inheritors and bases,
file member, recent files and edits and theres the fast goto feature
Resharpers static analysis is far more comprehensive than what you get from VS
So what do you need? (I am definitely not giving up Resharper)
Peter,
Best person that can answer this question is yourself. What I suggest is you download it, learn it (and note I said learn it, not just play with it). Then decide. However, I'll warn you that it's quite addictive.
My question is VS2010 == VS2008 + ReSharper ?
Oh hell no. VS2010 has more features than VS2008, and some of those feature ideas were stolen from ReSharper, but vanilla VS2010 is still a long way behind VS2010 + ReSharper 5 or even VS2008 + ReSharper 5.
From a quick glance at my 31 Days of ReSharper blog posts (written back in the R# 2.5 days), here are just a few ReSharper features that are still not present in VS2010: (Please correct me if VS2010 does have any of these -- I haven't actually used it that much without ReSharper!)
Unused code highlighted in gray and with quick-fixes to delete the unused code for you (this is just one of many hints and warnings R# does that VS does not)
Visual indication of where you have hints, warnings, and errors in a source file (colored stripe next to the vertical scroll bar)
Integrated unit-test runner that's not locked down to only MS's test framework
Shared settings for code formatting, code templates, etc. -- check these settings into version control, and they'll be picked up automatically by other computers (no manual export/import)
Go To Type -- a pop-up window where you can enter a type name (or part of the name) and jump straight to the right source file
Navigate to derived types / overriding methods
Code Structure View -- view a list of members in your type, and drag/drop to reorder them in your source code
R# will suggest variable names for you
You can invoke an Intellisense dropdown that shows types from all namespaces (and then it adds the using for you)
It's eerily good at guessing what you meant when you tell it to fix an error for you
Remove unused braces and Invert If
Generate Code (I particularly like Generate Equals and GetHashCode, even though I use them very rarely)
Viral Rename (if you rename a type, it'll also suggest that you rename any variables that were named after the type)
And best of all, Safe Delete.
Safe Delete rocks.
And that's just the features that R# had in 2.5 when I wrote the 31 Days of ReSharper. They've added plenty of new features since (I just don't have a comprehensive list handy). A couple of my favorites are the background solution-wide analysis, which will tell you in nearly real-time if you have compiler errors anywhere in your solution, and Inspect > Value Origin, which is just wicked cool.
If your having to ask the question, my guess is that you're not using ReSharper to its full potential. Personally I find that R# writes most of my code for me and I feel like a noob using visual studio without it.
YES. unequivocably YES.
After migrating to Visual Studio 2010 we asked our development team if buying Resharper upgrades is worth the investment. The votes were unanimous: yes!
Btw: we use VS2010 Premium and the devteam has its own budget.
Why don't you try out the R# 5 betas and then you can decide if you're using enough of its features to justify purchasing it.
http://confluence.jetbrains.net/display/ReSharper/ReSharper+5.0+Nightly+Builds
ReSharper has been around long enough that developers might purchase the upgrade just out of habit! :)
I recall that when VS2008 was released, R# wasn't quite ready, and there was griping among the .NET community about it. "Must...have...ReSharper!". Heh. Jetbrains appear to be on top of it this time though.

Resources