Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Codist 6.4 Beta #206

Closed
12 tasks done
wmjordan opened this issue Jun 12, 2022 · 20 comments
Closed
12 tasks done

Codist 6.4 Beta #206

wmjordan opened this issue Jun 12, 2022 · 20 comments
Assignees
Labels
💾 have download

Comments

@wmjordan
Copy link
Owner

wmjordan commented Jun 12, 2022

Download

Codist 7355

Codist 7353
Codist 7347
Codist 7345
Codist 7331
Codist 7328
Codist 7323
Codist 7318
Codist 7310
Codist 7307

What's new

  • NaviBar
    • Fixed that in some cases NaviBar could crash VS (ArgumentException adding to PropertyBag when handling an event #205, 7302, 7328)
    • Changed the behavior of #region nodes on C# NaviBar to display members within #region directive pairs (Suggestion: Display #Regions in the NaviBar #196, 7307, 7310)
      image
    • Used special icons for auto properties (7323)
      image
    • Added a new option to filter auto properties with fields and accessors with methods (7323, 7331, 7345)
      image
      When this option is in effect, accessor properties are not counted when filtered by Fields and auto properties
      image
      ...accessor properties will be filtered along with methods
      image
    • Fixed incorrect icons for C# interface members in NaviBar (7345)
    • Tweaked the appearance of NaviBar drop-down (7345)
  • Symbol List
    • Separated filter buttons for member accessibilities (7318)
      image
    • Used special icons for interface methods with default implementation (7347)
  • Super Quick Info
    • Supported indexer property in C# Quick Info (7318)
      image
    • Displayed special icons for interface members (7347)
    • Fixed circular reference of <inheritdoc/> in C# XML Doc could crash VS (7353)
  • Scrollbar Marker
    • Fixed a bug in comment marker which crashed VS (7355)
@wmjordan wmjordan self-assigned this Jun 12, 2022
@wmjordan wmjordan added the 💾 have download label Jun 12, 2022
@wmjordan wmjordan pinned this issue Jun 12, 2022
@wmjordan
Copy link
Owner Author

wmjordan commented Jul 1, 2022

@fitdev
Hi, my friend.
There is a new test version, which provides an option to alter the behaviors of filters related to C# properties on the NaviBar drop-down (please read descriptions and screenshots above).
Could you give some comment on that?

@fitdev
Copy link

fitdev commented Jul 7, 2022

@wmjordan
Sorry for the late reply. Somehow I missed the notification. I have not yet tried the new version, but I saw this new feature (I check here regularly). It seems interesting. But I am not sure if personally I have a strong need for those, but still such a distinction is nice to have. Here are my few points since you asked:

  • I don't particularly like the icon you used for the new category. It just does not look like a property thing to me. But that's just a matter of taste and preference (I dislike the VS 2022's new icons for example).
  • A further distinction between readonly and read-write properties would be nice (unless there is one already). Also those properties with init as opposed to set would be nice to highlight too. Plus there's C# 11's required properties too. So, altogether that's quiet a lot of combinations. Not sure how best to surface that. Perhaps required properties could be marked with a red * overlay (similar to how such fields are usually marked in online forms for example). As for get vs set vs init, perhaps arrow overlays can be used for those: down arrow for get (similar to downloading), up arrow for init (similar for uploading), and both arrows for set. Or, perhaps it may make sense to have a double icon / double item for most properties that have both getters and setters/initters.

@wmjordan
Copy link
Owner Author

wmjordan commented Jul 8, 2022

  • perhaps arrow overlays can be used for those

Thank you for your suggestion. It does require some extra code to implement that. I will see into it later.

  • A further distinction between readonly and read-write properties would be nice

Distinction does exist. Those readonly properties, auto-properties, init-only properties, static members, async members, etc. do have their special icons on the right side of the drop-down list. Perhaps I shall present a legend at the bottom of the list to tell the user what those icons mean.

@wmjordan
Copy link
Owner Author

wmjordan commented Jul 8, 2022

  • I don't particularly like the icon you used for the new category. It just does not look like a property thing to me

I am not satisfied with icons for the manually implemented properties either. However, I could not find something better than them in VS predefined icons.

Currently I used the following icons for manually implemented properties:
image

Another option is to use the following ones:
image
or these ones:
image

@fitdev
Copy link

fitdev commented Jul 8, 2022

Yes, your initial choice for the icons seems the best to me. The other two choices are much worse in my opinion. Too bad you are limited only to the icons shipped with VS. As a side note, perhaps there is a way to use custom icons? In fact I would much prefer pre-VS2022 icons for most of the symbols. So maybe if you can add this as a feature to Codist that would be real nice!

@wmjordan
Copy link
Owner Author

wmjordan commented Jul 8, 2022

perhaps there is a way to use custom icons

Yes, there is. But it requires so much work that the gain is far less than my cost.

@fitdev
Copy link

fitdev commented Jul 8, 2022

Yes, there is. But it requires so much work that the gain is far less than my cost.

I understand. Perhaps something for the backlog then.

@fitdev
Copy link

fitdev commented Jul 8, 2022

Just a quick idea: It would be nice if somehow you can surface Default Interface Implementations (DIMs) in both super quick info tips, as well as NaviBar's dropdown (i.e. indicate which interface members actually have DIMs).

@wmjordan
Copy link
Owner Author

wmjordan commented Jul 9, 2022

Thank you for reminding me that.
I've completely missed those improvements in C# 8!
I will see into it.

@wmjordan
Copy link
Owner Author

wmjordan commented Jul 9, 2022

I created a sample project with DIM.
Here's how Rosolyn behaves.

image

Zero members are reported for type EmptyImplementation and AdvancedImplementation. I think it is appropriated to display like that.

Currently the NaviBar incorrectly displays accessibility as private for interface members, which by default should be public. I've fixed this in the new beta.

@fitdev
Copy link

fitdev commented Jul 9, 2022

Yes, the way you described it seems correct. Thank you for looking into this so quickly.
The only thing is that maybe for EmptyImplementation and AdvancedImplementation you can still show members coming from DIMs under a new category perhaps (i.e. DIMs) with a separate filter button?

@wmjordan
Copy link
Owner Author

wmjordan commented Jul 9, 2022

The filter button, at this moment, could not serve that.
Maybe it is possible to provide an option to Include Default Implemented Members from Interfaces.

@fitdev
Copy link

fitdev commented Jul 9, 2022

Sure, that's another way to do it. Ideally though such members should be clearly marked as coming from DIMs and not defined on the type itself.

@wmjordan
Copy link
Owner Author

Yes, I am going to mark that kind of members at the right side icons in the symbol list.

@wmjordan
Copy link
Owner Author

wmjordan commented Jul 11, 2022

There's a new beta version which has special icon for interface methods that have default implementation.

@fitdev
Since I don't program .NET Core projects, please help test that version.

@fitdev
Copy link

fitdev commented Jul 11, 2022

Just installed the latest beta. I like the way you show DIMs now. Looks good. I will let you know if I have more feedback.

@wmjordan
Copy link
Owner Author

Well, glad you like that.
I am going to release a new version next week if nothing goes wrong.

@fitdev
Copy link

fitdev commented Jul 18, 2022

Got an exception when apparently trying to hover over some code or doing document formatting:

Application: devenv.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ArgumentOutOfRangeException
   at Microsoft.VisualStudio.Text.Implementation.BinaryStringRebuilder.GetText(Microsoft.VisualStudio.Text.Span)
   at Microsoft.VisualStudio.Text.Implementation.CachingTextImage.GetText(Microsoft.VisualStudio.Text.Span)
   at Microsoft.VisualStudio.Text.Implementation.BaseSnapshot.GetText(Int32, Int32)
   at Codist.Margins.CommentMargin.DrawMarkers(System.Windows.Media.DrawingContext)
   at Codist.Margins.CommentMargin.OnRender(System.Windows.Media.DrawingContext)
   at System.Windows.UIElement.Arrange(System.Windows.Rect)
   at System.Windows.ContextLayoutManager.UpdateLayout()
   at System.Windows.ContextLayoutManager.UpdateLayoutCallback(System.Object)
   at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
   at System.Windows.Media.MediaContext.RenderMessageHandlerCore(System.Object)
   at System.Windows.Media.MediaContext.RenderMessageHandler(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(System.Object)
   at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
   at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
   at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)

@wmjordan
Copy link
Owner Author

Sorry to see this. Please use the new beta.

@wmjordan
Copy link
Owner Author

Don't use build 7354, please use 7355.

@wmjordan wmjordan unpinned this issue Jul 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
💾 have download
Projects
None yet
Development

No branches or pull requests

2 participants