This question is locked. New answers and comments are not allowed.
Hi,
After having tried JustCode for a month, I whish to share my feedback here.
Context first, why I came across JustCode ?
I tried Resharper and I found it just unusable on real projects and with a standard machine (you know, with a spin disk...).
Second, I disliked its intrusive way to operate.
So I looked for an alike tool, and I found JustCode.
My experience with JustCode
For information, my computer has a legacy disk, 12 GB of RAM, a quad-core CPU. It is far from the top, but it's not the worst configuration. I'm used to have several VS opened (often 2 or 3, sometimes many more). My projects are typically in C#, .NET 3.5 to 4.5 (console and web apps for the most part).
First of all, it's a good but expensive product. It seems clear that there is a lot of work and cleverness behind the tool.
It is far less intrusive than Resharper and a little faster in general.
And I purchased it.
BUT, some annoying things to me makes me not say that it's a great product.
What I disliked
Initial configuration / shortkeys
A thing that I really dislike with ReSharper is it wants to replace all VS default shortkeys!
I like to be able to easily switch on another computer without any tool (just VS with default c# profile settings) and I know that developers accustomed to ReSharper have some difficulty to adapt themselve to a "naked" VS (I saw it). And I do not want to feel like this.
JustCode is way better in this area: there is far less default shortcuts. Nevertheless, after installation, there are some conflicts with default VS shortcut. It's ok if JustCode wants to replace a shortkeys with the same functionality. Otherwise it is not. For example, there are lots of shortkeys for JustCode tests runner. I do not want to use it. So I basically have to uncheck all shortkeys in conflicts with features I did not demanded.
I know it's hard. We all want expose all our features. But think about the user experience: I do not use all VS features, and I do not use all JustCode features. I want to be able to select what I want to pick. And before that, I prefer to stick with default non conflicted settings. Be forced to uncheck a bunch of checkboxes because of conflicts in a First installation Wizard is just borring.
Code style / Naming conventions
I'm used to code several enums in one file named "Enums.cs". And I think I'm not unique in this case.
JustCode generates the warning "Type name does not math file name" for each enum in this file.
There is no smart way to configure an exception to this rule (one type by file).
I definitely can change my habits, but I think that should not be needed with a ("unobtrusive") productivity tool.
Similarily, sometimes I organize some interfaces in a folder named "_interfaces". The underscore means that the folder name is not included in the namespace.
For example:
\Root
\_interfaces
interface1.cs (namespace: Root)
\Commponent
component1.cs (namespace: Root.Component)
On this latter case, I appreciate the answer from the support. There is a pretty useful way to exclude un folder from the namespace rule: select the folder and change its (discrete) property "Do Not Contribute to Namespace".
Naming convention suggestion: rename field and conflict...
If the suggested name the a field to rename is already used, JustCode add a number at the end of the name.
For example:
private static readonly object _instance;
public static object Instance { get { return _instance; } }
--> JustCode wants to rename _instance to Instance, but the actual name will be Instance1.
This is ugly. I think it should not generate any warning in this particular case.
In addition, the field is not always renamed in comments (like "<see cref='typename'/>"). So the code change generates warning from VS compiler.
Generated code
It's pretty common to have some code files that simply can't respect code style rules.
For example, generated code and native method calls (P/Invoke).
Here either, there is no smart way to filter these files from code analysis.
Though, it should be relatively simple to exclude members marked with GeneratedCodeAttribute. I have typically lots of DTO that contains properties named from SQL column names. Theses DTO are marked with GeneratedCodeAttribute and, in my opinion, should be ignored by JustCode because it's not my code. If there is a problem with generated code files, VS compiler is good enough to do its job and warn me.
For P/Invoke, the "recommended way" by MS is to move these calls to a NativeMethods class (so a NativeMethods.cs file). Because it's a convention, JustCode should be smart enough to allow exclusion of this file from code analysis (or coding style rules).
It is possible to exclude files by filename and it's what I've done. But why it's not the default configuration ? ;-)
Refactor
I used "rename field" feature and it seems that JustCode do not take into account conditional compilation constants.
For example:
#if STORE_ALL_FIELDS
const Field.Store noStore = Field.Store.YES;
#else
const Field.Store noStore = Field.Store.NO;
#endif
If a switch STORE_ALL_FIELDS, my project do not compile anymore after a rename of the variable "noStore".
Code cleaning
Add default modifier to declarations without access modifier:
If keyword "sealed" is present, JustCode deletes it (and add the default access modifier). It's a bug (not a feature).
Remove unused using:
JustCode ignores my comments (and specifically <see cref="typename"/>). So it removes using directives, I comments become unresolvable. After the changes, VS compiler warns me about my comments. I think it's a bug, but JustCode perhaps could be smart enough to "detect" new warnings from VS directly created by its changes, and rollback them (and display apologize.... ok ok).
In addition, I liked to see a cleaning rule "remove unnecessary namespaces on type names".
For example:
using MyNamespace;
class MyType {
private MyNamespace.MyType _instance;
}
This example is overly trivial but that rule could help in typical production code.
Performances
All is fine with only one instance of VS and a solution with few projects.
All is not fine with several instance of VS (and some solutions with a dozen of projects - but it's not generalized to all solutions).
Often, when I open more than 2 solutions, I have to deactivate JustCode because it's unusable (sometimes I have to wait seconds between each keystroke).
I noticed that Resharper has some smart mecanism: it waits a delay before refresh after code change (like 300ms). I don't think JustCode has a similar feature. Maybe, it would have helped.
I disabled typing assistance, visual aid tag and smart tags, it's better but there is no miracle...
It's unfortunately the most annoying thing...
Wrong errors/warning
Sometimes, JustCode becomes crazy and generate irrelevant errors and warning. I have to disable it until it calmed down.
Licence activation
I had to uninstall my trial version and reinstall JustCode after purchase to activate my licence. It's not very respectfull to the user experience these days...
Finally, I wish to thanks the team: they seems to be relatively easy to contact.
Thanks for reading,
Eric
After having tried JustCode for a month, I whish to share my feedback here.
Context first, why I came across JustCode ?
I tried Resharper and I found it just unusable on real projects and with a standard machine (you know, with a spin disk...).
Second, I disliked its intrusive way to operate.
So I looked for an alike tool, and I found JustCode.
My experience with JustCode
For information, my computer has a legacy disk, 12 GB of RAM, a quad-core CPU. It is far from the top, but it's not the worst configuration. I'm used to have several VS opened (often 2 or 3, sometimes many more). My projects are typically in C#, .NET 3.5 to 4.5 (console and web apps for the most part).
First of all, it's a good but expensive product. It seems clear that there is a lot of work and cleverness behind the tool.
It is far less intrusive than Resharper and a little faster in general.
And I purchased it.
BUT, some annoying things to me makes me not say that it's a great product.
What I disliked
Initial configuration / shortkeys
A thing that I really dislike with ReSharper is it wants to replace all VS default shortkeys!
I like to be able to easily switch on another computer without any tool (just VS with default c# profile settings) and I know that developers accustomed to ReSharper have some difficulty to adapt themselve to a "naked" VS (I saw it). And I do not want to feel like this.
JustCode is way better in this area: there is far less default shortcuts. Nevertheless, after installation, there are some conflicts with default VS shortcut. It's ok if JustCode wants to replace a shortkeys with the same functionality. Otherwise it is not. For example, there are lots of shortkeys for JustCode tests runner. I do not want to use it. So I basically have to uncheck all shortkeys in conflicts with features I did not demanded.
I know it's hard. We all want expose all our features. But think about the user experience: I do not use all VS features, and I do not use all JustCode features. I want to be able to select what I want to pick. And before that, I prefer to stick with default non conflicted settings. Be forced to uncheck a bunch of checkboxes because of conflicts in a First installation Wizard is just borring.
Code style / Naming conventions
I'm used to code several enums in one file named "Enums.cs". And I think I'm not unique in this case.
JustCode generates the warning "Type name does not math file name" for each enum in this file.
There is no smart way to configure an exception to this rule (one type by file).
I definitely can change my habits, but I think that should not be needed with a ("unobtrusive") productivity tool.
Similarily, sometimes I organize some interfaces in a folder named "_interfaces". The underscore means that the folder name is not included in the namespace.
For example:
\Root
\_interfaces
interface1.cs (namespace: Root)
\Commponent
component1.cs (namespace: Root.Component)
On this latter case, I appreciate the answer from the support. There is a pretty useful way to exclude un folder from the namespace rule: select the folder and change its (discrete) property "Do Not Contribute to Namespace".
Naming convention suggestion: rename field and conflict...
If the suggested name the a field to rename is already used, JustCode add a number at the end of the name.
For example:
private static readonly object _instance;
public static object Instance { get { return _instance; } }
--> JustCode wants to rename _instance to Instance, but the actual name will be Instance1.
This is ugly. I think it should not generate any warning in this particular case.
In addition, the field is not always renamed in comments (like "<see cref='typename'/>"). So the code change generates warning from VS compiler.
Generated code
It's pretty common to have some code files that simply can't respect code style rules.
For example, generated code and native method calls (P/Invoke).
Here either, there is no smart way to filter these files from code analysis.
Though, it should be relatively simple to exclude members marked with GeneratedCodeAttribute. I have typically lots of DTO that contains properties named from SQL column names. Theses DTO are marked with GeneratedCodeAttribute and, in my opinion, should be ignored by JustCode because it's not my code. If there is a problem with generated code files, VS compiler is good enough to do its job and warn me.
For P/Invoke, the "recommended way" by MS is to move these calls to a NativeMethods class (so a NativeMethods.cs file). Because it's a convention, JustCode should be smart enough to allow exclusion of this file from code analysis (or coding style rules).
It is possible to exclude files by filename and it's what I've done. But why it's not the default configuration ? ;-)
Refactor
I used "rename field" feature and it seems that JustCode do not take into account conditional compilation constants.
For example:
#if STORE_ALL_FIELDS
const Field.Store noStore = Field.Store.YES;
#else
const Field.Store noStore = Field.Store.NO;
#endif
If a switch STORE_ALL_FIELDS, my project do not compile anymore after a rename of the variable "noStore".
Code cleaning
Add default modifier to declarations without access modifier:
If keyword "sealed" is present, JustCode deletes it (and add the default access modifier). It's a bug (not a feature).
Remove unused using:
JustCode ignores my comments (and specifically <see cref="typename"/>). So it removes using directives, I comments become unresolvable. After the changes, VS compiler warns me about my comments. I think it's a bug, but JustCode perhaps could be smart enough to "detect" new warnings from VS directly created by its changes, and rollback them (and display apologize.... ok ok).
In addition, I liked to see a cleaning rule "remove unnecessary namespaces on type names".
For example:
using MyNamespace;
class MyType {
private MyNamespace.MyType _instance;
}
This example is overly trivial but that rule could help in typical production code.
Performances
All is fine with only one instance of VS and a solution with few projects.
All is not fine with several instance of VS (and some solutions with a dozen of projects - but it's not generalized to all solutions).
Often, when I open more than 2 solutions, I have to deactivate JustCode because it's unusable (sometimes I have to wait seconds between each keystroke).
I noticed that Resharper has some smart mecanism: it waits a delay before refresh after code change (like 300ms). I don't think JustCode has a similar feature. Maybe, it would have helped.
I disabled typing assistance, visual aid tag and smart tags, it's better but there is no miracle...
It's unfortunately the most annoying thing...
Wrong errors/warning
Sometimes, JustCode becomes crazy and generate irrelevant errors and warning. I have to disable it until it calmed down.
Licence activation
I had to uninstall my trial version and reinstall JustCode after purchase to activate my licence. It's not very respectfull to the user experience these days...
Finally, I wish to thanks the team: they seems to be relatively easy to contact.
Thanks for reading,
Eric