Shaykatc's WebLog

Code snippets in Whidbey

One of the other hats I wear on the team, is looking after our samples story. We are looking at our story for code expansions right now.

A code expansion simply put is a file that you author with some code in it. You can add it to a folder or folders in a special place on the machine. When you are in the IDE you can invoke a command that lists these folders and lists the expansions you can pick from in an intellisense like view. In Whidbey we are thinking of providing some common tasks that users would use by default.

Of course the big question is which tasks? Right now we are thinking of organizing it by areas of the framework you would use - so you would hit a key combination and see a list like:

  • Collections
  • Data
  • Email
  • Files
  • ...

You could then pick one, say Files and you would see a list of tasks underneath it:

  • Reading from a file
  • Writing to a file

Selecting the task would paste the code in for you.

Sounds simple right? Until you hit the million dollar question - what subset should you provide? What are the simple tasks that a user does often enough that makes itself a task and satisfies a broad percentage of our customers needs? For e.g. reading and writing files is something I could see people doing often enough that it warrants adding - but having code that deals with WMI for e.g. might be something obscure for our customers.

So what do you guys think? What would you have as the hierarchy? What would you have as the tasks? Let me know your feedback...I'm thinking about this a lot right now so this a good time to influence me :-)

Published Tuesday, February 24, 2004 3:20 PM by shaykatc
Filed under:

Comments

 

Michael Giagnocavo said:

This is obviously extensible, right? How does this work with normal templates (like typing for giving us a for loop)?

I use CodeRush from DevExpress. For common things, like creating a new DB command to do a sproc, I assign "newcomm ". Every time I type newcomm<space>, it fills in and puts the cursor where I define in the template. Hopefully Whidbey will expose this for us to edit. Esp. since I don't like the default formatting that the C# team uses.

Apart from that, I think if there are 10-15 categories, that's a good base. If I don't know what WMI is, I won't type it. The few times I do use WMI, it's great to have snippets available quickly. If the categories and snippets are user-managable (with per-project option perhaps :)?), then it's not a problem.
February 24, 2004 4:16 PM
 

David Nicholson said:

It might also be good for things I don't do often or don't know so well. So not just common tasks.

My personal frequent uses would include collections and files.
February 24, 2004 5:28 PM
 

John Cavnar-Johnson said:

I think the more common tasks from the less common namespaces are the most important to have. Getting started with WMI, Perfmon, MSMQ, etc. is often the hardest part. Code snippets would be great for those areas.
February 24, 2004 5:32 PM
 

Scott Allen said:

Collections, Data, and Files are good categories.

A couple ideas:

Net
- Web request
- Web request via POST
- Web request with credentials

XML
- Load from stream
- Save to stream
- XSLT transformation
- XPATH / XQuery search
February 24, 2004 6:04 PM
 

Louis Parks said:

I'll second Scott Allen's ideas.

A few others would be expansions for caching and iterating over collections.

I think the most important thing is that expansions are *very* easy for us to add/modify. I don't mean easy like enterprise templates (after reading for 30 mintues, you might have modified all the right files in all the right places). I mean easy like, add a file to a directory and away you go.
February 25, 2004 12:01 AM
 

Ferris Beuller said:

Patterns like IDisposable etc would be good to have done for me.

If I make a class and want start to code the IDisposable pattern, can I just say "hey, VS dude there, can u like ya know, read my mind and do this IDisposable thang for me S'all good". and it goes "yeah, sure dude, ding, done dangety".

February 25, 2004 1:13 AM
 

Ferris Beuller said:

For Intellisense, how about fixing the listing so it catagorizes the actual things into like... classes, enums, events, etc etc Im tired of having to scroll through a list of alphabetical sorted thigns for all events and end up having to go to the object browser for a event list hunt.

Would be niec is this was an option to catagorize intellisense popup boxes.
February 25, 2004 2:00 AM
 

Michael Giagnocavo said:

I disagree with "getting started" code being placed in the common snippets. Snippets should be good, direct code, not a crutch for someone who's learning something. I wouldn't want the Reflection.Emit snippets (if there are any) to be littered with non-real-world "getting started" snippets. That's what documentation samples and SDK samples are for.
February 25, 2004 10:30 AM
 

Nicholas Paldino [.NET/C# MVP] said:

Shay,

I think that with this particular issue, you will have a pretty difficult time. In my opinion, the main use that expansions will have is for code that organizations or individuals use frequently which is not offered by the general framework. Given that the audience of the .NET framework is so vast (compared to most, if not every other organization's product), I would think that any expansions for commonly-performed tasks are really just functional points that are missing from the framework, and should be filled in.

- Nick
February 25, 2004 11:23 AM
 

Adrian Moore said:

Also, support the concept of an online folder where Microsoft can post new templates after the product is released.
February 25, 2004 11:32 AM
 

Enjoy Every Sandwich said:

In the bag tonight: Less bitch'n and whin'n. Counts:Blogging: 8; Dev: 22; Otherwise: 8; SQL: 5; WILY: 8. Line of the night:
February 25, 2004 11:23 PM
 

Michael Giagnocavo said:

Nick, so you're saying that an expansion template that sets up (as a simple example, even though most data access components would already do something similar):

SqlConnection connection = new SqlConnection(<cursor>);
SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandText = "<cursor>";
using (connection) {
connection.Open();
}

Is just because the sql API is missing something? I see expansions as a way to write more code in less time by taking out repetitive, but needed, code. I use CodeRush and have many specific snippets setup, and it saves me a lot of work, where no better API could help.
February 27, 2004 10:11 AM
 

Rick Byers said:

I've thought for a while that it takes too much work to create a new Exception type that follows all the guidelines. I'd like to see an expasion for new exception classes with all the correct constructors etc., perhaps even with some meaningfull XML comments.:

[System.Serializable]
public class MyException : System.ApplicationException
{
public MyException()
{
}

public MyException( string message )
: base( message )
{
}

public MyException( string message, System.Exception inner )
: base( message, inner )
{
}

public MyException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context )
: base( info, context )
{
}
}


March 2, 2004 10:58 AM
 

Steve Hiner said:

I love this idea. It would only be fully useful if we could easily add new templates and if the format was standarized enough that people could post their snippets. I totally agree with Adrian that MS should provide updated templates on their site.

A couple things that immediately jump to mind that I'd like to have snippets for:
Serialize/Deserialize for XML and Binary, using streams or files
Send email using system.web.mail

Those are 2 of the things I most often find myself looking around in old code to copy and paste it.
March 2, 2004 12:24 PM
 

Steve Hiner said:

You could include both Quick Start type code and commonly used code if you separated them in the menu.

Perhaps the commonly used code could be expanded in the main intellisense popup but there could be a QuickStart entry at the bottom that would give access to snippets that aren't realistic in production code but would give the user a boost with a new namespace. The quickstart could basically include the code we currently see as examples in the documentation.
March 2, 2004 12:28 PM
 

aBlogByGus said:

March 22, 2004 12:37 AM
 

aBlogByGus said:

March 22, 2004 12:42 AM
 

Jeff Gonzalez said:

I used CodeSmart for this similar thing, then I just went back to using QuickCode for .NET, it is free if you dont register it. CodeRush looks like it has promise though.

I know this is off topic now, but how did you get a serializable exception working? I always get the error "Cannot serialize class with properties decorated with declarative security attributes."
March 26, 2004 8:19 AM
 

Code/Tea/Etc... said:

May 14, 2004 4:39 AM
 

aWorkBlogByGus said:

January 8, 2005 5:04 AM
 

aWorkBlogByGus said:

Update (1/31/08): It looks like Snippy has now found a home on CodePlex . I haven't been maintaining

January 31, 2008 1:50 PM
New Comments to this post are disabled

© 2008 Microsoft Corporation. All rights reserved. Terms of Use  |  Trademarks  |  Privacy Statement
Microsoft
Page view tracker