Coder Social home page Coder Social logo

luthetus.ide's Introduction

Luthetus.Ide (In Development)

Example GIF

Demo:

https://luthetus.github.io/Luthetus.Ide/

Installation:

INSTALLATION.md

Introduction:

Luthetus.Ide is an IDE, but it differentiates itself by being the ultimate PDE, or personal development environment.

I'm not sure of the origins for the term "PDE", but I first heard it from a contributor of Neovim named TJ DeVries.

If one programs with a variety of programming languages, its possible they've ended up with multiple different "IDE"(s) downloaded. Where each "IDE" corresponds to a different environment.

Luthetus.Ide works by way of the interface, "ICompilerService".

Therefore, any programming language can be supported. And one can choose which ICompilerService(s) to use.

As of this point in development, the C# compiler service is the most developed implementation. I "dogfood" the IDE, and since the source code is C#, I spend most time on the C# compiler service.

The IDE needs to be language agnostic, if one never will write C# code, then they shouldn't be forced to have that compiler service added.

Furthermore, many IDE(s) that exist run on a single operating system. Luthetus.Ide does not tie you to any particular operating system, it is fully cross platform with Linux, Mac, and Windows.

"Why is Luthetus.Ide free and open source?".

This is not a matter of undercutting the market, nor is it a matter of me attempting to justify a badly coded product.

I believe there needs to exist an IDE that is not proprietary software, and not exclusive to any specific programming environment.

Donations:

I am currently working full time on this project, and live with my parents.

My hope is to reach an income of $800 a month (equal to a job that pays $5 an hour).

The main two avenues I have in mind are

  • Tutoring (email me [email protected] | $20/hour paid via paypal is preferable but I'm open to other offers)
  • And this donation button.

Donate with PayPal

Run the repo:

Clone, then run Luthetus.Ide.Photino.csproj (or any of the other Hosts such as WASM or ServerSide).

NuGet Packages:

The individual libraries used in Luthetus.Ide are available as NuGet Packages.

There is a README.md for each of the libraries to aid in installation:

My Youtube Videos

You may be interested in visiting my youtube channel. I make videos about this repository there.

About me (Hunter Freeman)

luthetus.ide's People

Contributors

huntercfreeman avatar luthetus avatar mominraza avatar

Stargazers

Ward Impe avatar  avatar  avatar Sasha Zadykian avatar Abdul Al-Hasany avatar PodyNoo avatar Nicholas avatar ChaseC avatar James Meyer avatar Mike Allan avatar  avatar André Luiz avatar  avatar Khalid Charaa avatar Kevin Moens avatar  avatar Heartlander avatar Giorgio Lasala avatar Boni avatar Ivan Tcholakov avatar  avatar Roy Ossai avatar  avatar ِAiman Salamahِ avatar Sijmen Koffeman avatar RayDay avatar Kaminashi Yashiro avatar Cody "K0mraid" Stobaugh avatar Gowon Patterson avatar Jonatas Martins avatar Garrison Brinkmann avatar Fei Zhang avatar well.james avatar  avatar Finnur Bragason avatar DY avatar memoyu avatar token avatar Pedro Hernández avatar Christian Buchhave Mortensen avatar Felix Strauß avatar kbot7 avatar Robert Bedell avatar Connor Hallman avatar Isaac Borrero avatar BobH avatar Demin Dmitriy avatar Levi avatar Kirill Osenkov avatar Murry avatar Aman Tur avatar Sanam avatar Smit Bhaskar Shetye avatar Kamil Patecki avatar hypeartist avatar Luqman Hafizi avatar 4win avatar Snipcola avatar ing avatar Gabriel Oliveira avatar Sergey Gulyaev avatar Daniel Varov avatar Łukasz Mrowiec avatar Luke Parker avatar S Ravi Kumar avatar 俞正东 avatar Ji Yong Jeung avatar Daniel Draghici avatar Kato Gangstad avatar Батмөнх Билгүүн avatar  avatar Yoeri Van Damme avatar  avatar damon avatar Randolf avatar Jim Deane  avatar  avatar Saqib avatar Abhirup Bhattacharyya avatar Matteo Zamparini avatar Jared Thirsk avatar Felix Strauß avatar  avatar  avatar LuisMars avatar  avatar M0N7Y5 avatar Rafael Julio avatar Weslley Luiz avatar Aaron Junod avatar Drake avatar Zero Codes avatar  avatar Austin Lennert avatar TwoPinkyNoBrain avatar junichi takeda avatar Angelo Belchior avatar Ahad Chowdhury avatar  avatar fred avatar

Watchers

Ivan Tcholakov avatar Robert Ginsburg avatar  avatar Greenstones Research Laboratories avatar

luthetus.ide's Issues

[Bug] Tab spacing messes with the text editor

  • Scroll horizontally such that a tab key is just barely visible (on the left side). This makes things look weird and move oddly.
  • Click the first half of a tab character vs the last half you cannot easily go to the left or right side based on percentage closer that you click to one end.
  • Proportional font breaks when there is a tab key on the same line as any proportional font text.

Bring Cursor into View

With the cursor on the last line in the editor (Lines: 16), press enter to add new line.
image

A new line is added out of view (Lines: 17). The scrollbar must be moved to bring the new line into view.
image

Impressive work by the way!

Editor using Monaco?

Have you considered using a tool like Monaco to make your work easier? Or do you need to write everything from 0 to 1 yourself?

My Notes

I take notes in a .txt file every day. Each file is labled "2024-08-08", and broken into directory by year then another directory for month. Each month is written like: '01-January', '02-February', ... in order to ensure the folders are sorted how I want them. My notes as of "2024-08-08" are the following: (NOTE: github has markdown features and such for open and close square brackets but as I said I use a .txt file to track my notes, and I am literally copy and pasting my notes, albeit with tab replaced by "..." so markdown indents it.

2024-08-08

Round 1:
Started: 11:25 AM
Goal: 7:25 PM
Ended: ??:?? PM

NOTE: I program every single day, and always first thing create this block of text "Round 1..."
Preferably 8 hours every day is best. But, depending on my mood that day, I might get less, or more than 8 hours of work in.
In general I feel comfortable with the idea: "if you're having a bad day, just sit down, open the code, and give at least 1 hour. More often than not you will get a great deal done. Motivation is absurd; motivation begets motivation. The initial starting of a task is always painful. But it becomes worth it in time."


Common

[] Sorting options for the tabs (text editor in specific wants this feature)
[] Drag and drop move tab order.
[] If dropdown CANNOT fit onscreen, then provide a scrollbar.
[] Dialogs
....[] Minimum resize is solved easily by changing resize code from adding the difference in position, to capturing the initial position and only ever checking those two points for the duration of the resizing dragging.
....[] Enter key isn't closing the dialog when done with focus on the 'x' button
....[] Add ability to dock any dialog onto a panel group.
[] Count the amount of times the onfocusin events for ContextBoundary components are occurring.
[] TreeView
....[] Does tree view shift click select break for nodes that I've clicked on?
....[] Auto expand tree view nodes
....[] Auto collapse tree view nodes
[] Keybinds
....[] Any buttons which make to a command which has a keybind should have text that shows the keybind on the button (or on hover).
[] Panels
....[] Need intuitive keybind to unset the active panel tab
[] Rename 'luth_ide_section-body' from using the wording "section" to "panel"
[] Fix anywhere a Key.cs is string interpolated but it was implicitly ToString()'d instead of using the '.Guid' property.
[] Why are error notifications/dialogs no longer red?
[] ConfigureAwait(false) specifically in the background task service, what does this do (versus not having it)?

Text Editor

[] More consolidating of the blazor components related to text editor.
[] Sync find all and the find (in text editor)?
[] Vertical scrollbar move mouse to reset position 50% editor width not working it needs 100%?
[] Ctrl + Z something changes offscreen but I Don't scroll into view (think about accidentally hitting Ctrl + Z and not realizing, this would be infuriating)
[] After resize the text editor isn't updating (timing? this used to work)
[] Is the timing problem the effects?
[] When the editor fits in view, scroll wheel, you can see the bottom right connector between horizontal and vertical scrollbars it flickers, and then if there is a less opaque look to the connection then ull find that the vertical orientation of the mouse events is incorrect.
[] Within a small file select text with mouse and compare how it keeps up with the cursor or not as you move.
[] Bool to show TRAILING_whitespace
[] Cannot type first character non letter? (breaks line endings it seems)
....[] Type at start of file non letter not working
[] On mouse down cancel tooltip
[] If a text editor Model/ViewModel does initialize properly, make it obvious to the user
[] Protect against opening non text files. I opened a gif accidentally (or maybe it was markdown with a gif in it?). But it froze the IDE.
[] Drag and drop change order of tabs (make this change in the Common project to the shared tab code).
[] Do a better job of matching visual studio's keymap
[] If longest line contains a tab key, then the horizontal scrollbar will not render correctly.
[] Using 'Escape' key to exit the find overlay, does a javascript scroll to breaking virtualization.
[] Jump stack
[] Collapsible lines
[] Ctrl + mouse over draws underline, then onclick goto definition (where there exists an onclick).
[] Up and down arrow keymap should account for the width of a tab character, when determining the column on the next line that the cursor will move to.
[] "Find All"
....[] Add 'Word' boolean search option
....[] Add 'Match Case' boolean search option
....[] Tool should be autopopulated with the active selection (if there is one)
....[] Enter key should submit the form
[] When you delete text while the end of the document is in view, the height of the document is modified, and yet the scrollbar is not updated to reflect the changes.
[] Tree view enter key
....[] should set focus to the editor (it doesn't do it if the file is already part of the group)
....[] does the set focus bug, use preventScroll
[] Context menu crashes when trying to close it
[] Find (in text editor) does not work (when clicking the button in the ide header "Tools" dropdown)
[] When right clicking to get context menu, if the context menu is offscreen, a scroll into view on focus ends up breaking virtualization.
[] Showing dots for warnings/errors on scrollbar is super useful.
[] Finish the edit logic (undo for the other limit of history)
[] Fix dispatch text editor state cause re-render of all displayed editors, when it should just be the one that changed.
[] Horizontally if deleting line gets less long then bug virtualization
[] Two resource uri's as tabs in same group are not able to be told apart (without hovering for the full path)
[] Global find and replace
[] Find and replace in text editor
[] Is the context menu re-rendering whenever a file gets parsed by the initial solution wide parse?
[] Ctrl + Alt + DoubleClick => ExpandSelectionByCamelCase
[] Shift tab when \t\s\s where '\s' denotes 'space' what would happen (cursor is after the final '\s')
[] Two errors UI diagnostics can overlap entirely, this is bad.
[] Keybinds
....[] Finish these
........[] Alt + Up => move line up
........[] Alt + Down => move line down
........[] Ctrl + Alt + (ArrowLeft | ArrowRight) => move camel case
........[] F7 => Related Files quickpick
........[] Ctrl + Tab => Quick Pick file or context/tool
....[] Start these
........[] Home keybind
........[] No selection + { Shift + Tab } + Cursor positioned at or in the starting indentation should => IndentLess
........[] Ctrl + u and Ctrl + shift + u (to lowercase / to uppercase... verify that these are respectively correct)
....[] Fix these
........[] When inside a verbatim string and new line is pressed don't match indentation.
........[] Shift + Enter is putting the line ending in wrong spot see a mixture of LF and /r/n to see this

CompilerServices

[] Erroneously: The C# parser cannot parse a property identifier if the type does not match to an existing type in the binder.
[] Erroneously: The C# parser cannot goto definition on a type if there is a property with the same name
[] Move any .NET specific code to a .NET compiler service.
[] ICompilerService / the IBinder and etc... are not robust enough
....[] I cannot search for a type by name, it frustratingly MUST be done by providing a textspan from a text editor model.
....[] The frustration comes from the CSharpBinder internally tracking all the types (I think by their fully qualified name). I feel like the interface could easily support this considering the CSharpBinder (I think supports it already).
[] Don't escape character within a verbatim string
[] LSP (language server protocal)? I think LSP can be added while also having support for the customized ICompilerService and then one can choose between them. Because it isn't feasible for me to implement an ICompilerService to support every language. The reason I'm offput by LSP is due to an experience I had a few years back. Neovim didn't have any .razor support. The best you could do was set the filetype to be parsed as HTML. I haven't looked extensively into the issue, but I recall the Omnisharp maintainers said something like, "razor can't be supported because then you'd be running the C# server and a .razor server"? I can't recall the exact details of it. I still think LSP is a massive improvement to the IDE since it provides a breadth of language support. And like I said, preferably one could mix and match LSP for some languages and ICompilerService for others.

Ide

[] Git new branch not update active branch UI correctly?
[] Don't allow null working directory, it is unsafe. Always require the working directory to be specified.
....[] If working directory is null, throw an exception
[] Odd behavior difference between stoping startup control with the dropdown menu versus the 'x' button in the window manager when the app is running.
[] Does the observer for the CliWrap events wait for the previous event to finish being observed?
[] Custom file templates
[] The terminal is not guaranteed to initialize properly (probably the same issue as there is with the view models)
....[] Start it sometimes, general terminal is null, why?
[] StartupControl UI ViewTerminal dropdown menu option should set the active terminal to execution
[] Cut a project child directory paste did not delete source.
[] If I add another project, the solution wide parse task will be started again, while the previous one is still not finished, and going.
[] "Code Search" tool
....[] Should be autopopulated with the active text editor selection (if the active context upon keybind press is the text editor, and the text editor has a selection)
....[] Do not infinitely update contents, only do so if the text editor view model key changes.
[] On Windows the webview handles the keymap { Ctrl + r } by refreshing the "website". This is bad
[] The initial parsing of the solution, should not invoke 'ApplySyntaxHighlighting...spelling is probably wrong here'
[] Opening a file for the first time should invoke 'ApplySyntaxHighlighting...spelling is probably wrong here'
[] When changing the solution, clear the startup project.
[] Erroneously: If have a codebehind but no markup. To create a markup with 'create codebehind checkbox checked' will overwrite the existing codebehind.
[] If copy and paste file but file already exists at destination, the source still gets (erroneously) deleted.
....[] Followup: maybe it was because the file was the same name, and the TextEditorModel was out of date, and yet for some reason it wasn't prompting me to reload the file? I closed and re-opened the IDE and the file looks fine now.
[] Move Git folder out into its own Extensions project.
[] In code search, space should focus preview window
[] Terminal
....[] Would it be best to have the terminal command itself write out, and then ctrl shows that there is a link to click, which then shows the output of the command?
....[] Be 2 text editors
........[] A readonly text editor for the output
........[] A block text editor widget that renders a 1 line text editor at the final line of the readonly editor.
....[] Allow Ctrl + C to copy in terminal (or some other keybind but not exist current)
[] Does memory grow overtime?

Extensions.DotNet

[] Cancel test discovery?
[] Fix not having output window open then it won't do the tree view
[] .net cli
[] Test Explorer
....[] Distinguish between test discovery that had a build error, versus discovery that returned no results.
........[] Distinguish between no results due to not being xunit and no results (the output is different)
....[] Ability to stop a test
....[] Test explorer exception does not clear spinner
....[] (this error was happening when the running test was not the actively viewed one, I think) Test Explorer: Index was out of range. Must be non-negative and less than or equal to the size of the collection. (Parameter 'chunkLength') at System.Text.StringBuilder.ToString() at Luthetus.Extensions.DotNet.TestExplorers.Displays.Internals.TreeViewStringFragmentDisplay.BuildRenderTree(RenderTreeBuilder __builder) in C:\Users\hunte\Repos\RUN_Luthetus.Ide_Fork\Source\Lib\Extensions\Extensions.DotNet\TestExplorers\Displays\Internals\TreeViewStringFragmentDisplay.razor:line 11 at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)
[] Output panel
....[] On click goto file, line, and column.
[] Solution Explorer
....[] Shift + Ctrl + Alt + 's' => recursively reveal the currently active text editor file.
....[] Add buttons to the solution explorer that map to the keybinds.
....[] Where does focus go after I delete a file?
....[] SolutionExplorer search bar?
........[] Maybe make a generic search bar for the tree view themselves?
....[] File nesting for codebehinds does not work for C# project immediate child files
[] Rename 'TreeViewCSharpProjectNugetPackageReferences' to 'TreeViewCSharpProjectNugetPackageReferenceList'
[] Rename 'TreeViewCSharpProjectToProjectReferences' to 'TreeViewCSharpProjectToProjectReferenceList'
[] If close SolutionExplorer tab, one cannot bring it back with the View dropdown (this used to work)
[] Cannot move a project out of a solution folder (i.e.: NO solution folder encompasses the project after the command is ran).

Extensions.Git

[] Move git code from the IDE project to a new project of this name
[] git cli
[] Set Git Repo dialog in bottom right can open infinitely many copies of itself at the same time if you keep clicking it.

Object reference not set to an instance of an object.
at Luthetus.Common.RazorLib.Menus.Displays.MenuDisplay.HandleOnKeyDownAsync(KeyboardEventArgs keyboardEventArgs) in C:\Users\hunte\Repos\Luthetus.Ide_Fork\Source\Lib\Common\Menus\Displays\MenuDisplay.razor.cs:line 164
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

https://learn.microsoft.com/en-us/aspnet/core/blazor/performance?view=aspnetcore-8.0

Low Priority Items for v1.0.0

Note: this is a TODO list for v1.0.0, NOT a list of features in v1.0.0

  • #107
    • Tab width customization is something I want to support, but I don't feel its a necessary feature for V1
  • #106
    • A vertical line to mark width in text editor is not a necessary feature for V1.
  • #103
    • I want to make a diff editor, but I don't see it as a v1 feature
  • #100
    • I need to determine just how large of a tree view is needed to cause any performance issues. But I have yet to encounter a large enough tree view through 'general use' of the IDE. Therefore this is currently low priority
  • #91
    • Version control system integration is low priority for V1

[Feature] Ensure dropdowns render within viewport (if possible).

See the following GIF where I right click to bring up a context menu, and the context menu goes off screen.

dropdownGoesOffscreen

Fix idea

  • When rendering a dropdown, pre-measure the width needed, then if rendering the dropdown would make it go offscreen, offset the position of the dropdown so that it stays on screen.
  • In a case where it is impossible fit a dropdown onscreen, show as much as one can, then allow for scrolling.

Copy & Paste doesnt work in Mozilla firefox

Hello,

Im using your text editor in my application and I found that Copy & Paste doesn't work in Mozzila firefox and I would like to ask if it is planned fix or if is there any workaround for this issue ?

Best regards
puxson

[Release] v1.0.0

Here I will keep a list of all that I aim to finish for the v1.0.0 release.

  • 0 warnings
  • Version Control System integration
  • Diff Editor
  • Unit tests for regression testing
  • C# Compiler Service provides every feature that Visual Studio has at minimum
  • Debugging
  • Unit Test explorer/runner
  • Never freezes
  • Polymorphic UI (An opened file in the text editor results in a tab being shown. Therefore, I should be able to click and drag that tab off from the editor and have it turn into a dialog. Then I can take any dialog, and drag and drop it into any related dropzone. Example, a text editor that was made into a dialog should be draggable into the editor to make a tab)
  • Complete Grid Functionality (Any polymorphic UI element) should be able to be dragged around, this then shows a dropzone north-east-south-west and one center. This lets user make arbitrary amount of columns or rows in the grid. Or create tabs within a panel as they want.
  • Multi-cursor
  • Multi-select tree view
  • Text Editor: add collapsible rows
  • Text Editor: track the current level of indentation. When one hits newline, insert onto the newline the current level of indentation. Create markers for indentation. Perhaps this is to mean an open curly brace raises indentation level and then a closing curly brace decreases indentation level. Then this can be tracked.
  • Format file
  • I found a comment I made, it seems like a good idea: "/// TODO: Short circuit record value comparison by learning the order that values are compared, then put something obvious as the first comparison. (2023-09-11)"

If I get ideas about an entry in the previous bulleted list I'll make a respective note after this point.

0 warnings

I have a branch where I am making these changes.

Version Control System integration

I will start with git, then make an interface abstraction from there.

Diff Editor

Longest common subsequence calculation progress

Unit tests for regression testing

A lot of the UI won't be part of my focus here. More so, manipulating a text editor through C# itself and ensuring results are asserted.

C# Compiler Service provides every feature that Visual Studio has at minimum

CSharpCompilerService.cs.
A big issue with the current code (2023-11-1) is that namespaces are being pulled into scope multiple times causing classes to appear multiple times when the Binder provides auto-complete.
Also, things I'm calling AmbiguousIdentifierNode.cs.
So, one is parsing a method definition. If the return type of the method is not a Type within the scope. It results in this type/namespace possible state and its something I'm working out.

Debugging

netcoredbg
I need to look into how debugging works. I was provided a link to this open source dotnet debugger on reddit at one point. So I'll look further into that as well.

Unit Test explorer/runner

How does one discover unit tests? The ideas in my head at this moment are (2023-11-1):

  • Does dotnet CLI discover unit tests?
  • C# Compiler Service can be used to find the XUnit attribute usage? Then, how does one implement arbitrary testing frameworks.
  • In order to support arbitrary frameworks allow user to provide a regex expression and search entirety of the solution?

Never freezes

The freezing is incredibly infrequent at this point. Its something I've been improving with time. The issue stems from my understanding of the

  • Blazor Synchronization context,
  • Asynchronous programming
  • Concurrent programming
  • etc...
    Any fix I've made in the past came down to those being the root of the problem.

Polymorphic UI

The Notifications already can change from a notification, to a Dialog.
If the text editor has many tabs, with each tab representing a file, then one should be able to click and drag the tab to make it into a dialog. Then, one should be able to move a dialog into a respective dropzone to pin it to that as a tab.

Complete Grid Functionality

The following GIF is something I made more than a year ago (writing this on 2023-11-01).

completeGrid

The complete grid functionality would not look like what is shown in the GIF, but perhaps the GIF is a good illustration of what functionality I'm referring to.

Multi-cursor

I have showcased some of multi-cursor functionality more than a year ago in a youtube video.
I scrapped the functionality because there were some bugs that needed ironing out, yet other higher priority tasks needed my attention.

Multi-select tree view

If one is to select a directory, and a file inside that directory how does one determine what happens upon attempting to delete the selection. The true result is that you're deleting the directory. The file within it having a selection is irrelevant. I need to think of some way to do this 'reduction' of sorts to what actually is happening.

My TODO list:

  • Keybind: { F7 } -> CompilerService.ShowRelatedFilesQuickPick()
    • Example usage: User is in a .razor file. They want to go to the codebehind, so this keybind shows a quickpick list that contains the codebehind.
    • If there is only one item in the quickpick list, then goto that one item immediately as opposed to showing the quickpick list of only 1 item.
    • For a .razor file, more than one entry in the quickpick list would show, if a scoped css file exists in addition to the codebehind.
  • .NET CLI publish
  • BUG: Scrolling via a TextEditorCommand does not result in the gutter line numbers updating.
  • TreeView-MultiSelect
    • Copy,
    • Cut,
    • Paste,
  • TextEditorCommands
    • { Alt + ArrowUp } => move line up.
    • { Alt + ArrowDown } => move line down.
  • C# CompilerService
    • Handle 'enum' definition syntax
    • Parse the entire .NET Solution.
    • Thoughts on this topic:
    • Is it okay to just lock the IDE and do an initial parse of the entire .NET Solution or would that not be a nice user experience?
    • Cache invalidation
    • When somone changes a syntax, a dependency graph needs be followed to re-parse the related syntax.
    • Re-parse efficiently
    • How does 'double parsing' work?
    • I'm referring to a top to bottom parse versus when a language can see a a definition that comes after, without need for a prototype header.
    • I wonder if C# does it by creating those prototype headers on the first parse?
    • Like either you have to specify them like in 'C' or in 'C#' you don't have to specify them but someone still needs to make them, so the compiler does it first parse, then parses again for the details?
    • I think the answer is to parse only what is visible from a given scope, then add to that scope a 'prototype headers' list with entries.
    • So, even a method would for example have a list of 'prototype headers' in order to allow for a local function that is defined at the end of the method, but referenced at the start.
  • TextEditor Blazor component
    • Render the matching brace as a presentation layer
    • Render the whitespace as a presentation layer
    • { Ctrl + . } => QuickActions/Refactor
    • Code snippet provider
    • #105
  • IntegratedTerminal
    • Allow the working directory to change, and then be displayed properly for the integrated terminal.
    • Do not use RenderTreeBuilder, instead have a component with a switch statement that renders out a component based on the enum Kind of the std provided.

[Feature] TreeView virtualization

Fix idea

  • Each tree view node is the same height. Therefore, vertical virtualization should be possible, and result in improved performance when many nodes are shown.

PlatformNotSupportedException

Tried running the included Hello World project, getting this when executing (hitting the play button):

ERROR: System.PlatformNotSupportedException: Process_PlatformNotSupported at System.Diagnostics.ProcessStartInfo..ctor() at CliWrap.Command.CreateStartInfo() at CliWrap.Command.ExecuteAsync(CancellationToken forcefulCancellationToken, CancellationToken gracefulCancellationToken) at CliWrap.EventStream.EventStreamCommandExtensions.<>c__DisplayClass4_0.<Observe>b__0(IObserver1 observer) at CliWrap.Utils.F9A56BC066C1C55331A426EEC55B608B3C789C113870FC381D9D496607E7DCF71__Observable1[[CliWrap.EventStream.CommandEvent, CliWrap, Version=3.6.4.0, Culture=neutral, PublicKeyToken=1c4a4fc2d6886e5a]].Subscribe(IObserver1 observer) at System.Reactive.Linq.QueryLanguage.ForEachAsync_[CommandEvent](IObservable1 , Action1 , CancellationToken ) --- End of stack trace from previous location --- at Luthetus.Ide.RazorLib.Terminals.Models.TerminalSession.<>c__DisplayClass33_0.<b__0>d.MoveNext()`

Windows 10, Google Chrome 120

High Priority Items for v1.0.0

Note: this is a TODO list for v1.0.0, NOT a list of features in v1.0.0

Features

Table of content:

CLI .NET

  • .NET CLI publish

CodeSearch display

  • Non-hack implementation of the Task.Run logic

Commands

  • MoveLineUpCommand: Swap rowCurrent with rowPrevious. If textSelection, then all rows with selected text, are swapped with rowPrevious.
  • MoveLineDownCommand: Swap rowCurrent with rowNext. If textSelection, then all rows with selected text, are swapped with the rowNext.
  • SaveAllCommand: Iterate over all TextEditorModel(s) which have 'IsDirty' set to true. Foreach of these models, invoke the save function.

CompilerService C#

  • Handle 'enum' definition syntax
  • Outdated information: when somone changes a syntax, a dependency graph needs be followed to re-parse the related syntax that exists in other files.
  • goto definition should work not only by identifier, but by SyntaxKind
  • Constructor invocation for a type which has generic arguments
  • Collection initialization syntax

CompilerService Razor

  • Handle switch statement in markup: 'switch () { case Enum.Aaa: break; case Enum.Bbb: break; default: break; }'
  • Communicate with the C# Compiler service to determine what is in scope from the code behind.

CompilerService Generic

  • Don't syntax highlight 'if' statements as methods. This is also true for all other KEYWORD then parenthesis combos.

CompilerServices (in general)

  • Efficient parsing as the user makes edits to a document.
    • Preferably, a compiler service would correlate the text spans that represent a user's edit, to the position in the syntax tree. Perhaps then, one can follow references and know those also need to be re-parsed. Currently, when one edits a document, the entire document is re-parsed.

Debugging Programs

FindAll display

  • Non-hack implementation of the Task.Run logic

IntegratedTerminal

  • Add support for a user to respond to a prompt, while their terminal is executing a program. (i.e.: "What is your name", then the user types their name)

Keybinds

  • { F7 } -> CompilerService.ShowRelatedFilesQuickPick()
  • { Alt + ArrowUp } => MoveLineUpCommand
    • With TextSelection => MoveLineUpCommand(textSelection)
  • { Alt + ArrowDown } => MoveLineDownCommand
    • With TextSelection => MoveLineDownCommand(textSelection)
  • { Ctrl + Shift + s } => Save All

Keymaps

  • Default keymap should allow keybinds to be chords
  • Vim (this task is whether I find the Vim keymap to be satisfactory for version 1).
  • Vim Repeat(s)
    • Any digit other than '0' can be used to form any number. 27j is valid, 4w, etc..., but 10pp will not currently work. This is due to the '0' keybind which places the cursor at the start of a line.
- [ ] Vim TextObject(s)
- w ....... word
- e ........ end
- b ........ back
- h ........ move cursor left by 1 character
- j ......... move cursor down by 1 character
- k ........ move cursor up by 1 character
- l ......... move cursor right by 1 character
- 0 ........ home
- $ ........ end
- [ ] Vim Verb(s)
- d ............ delete
- c ............ change
- y ............ yank
- p ............ paste
- o ............ insert line below
- O ........... insert line above
- ^e ......... scroll down one row
- ^y ......... scroll up one row
- \< ............ indent less
- \> ............ indent more
  • Vim Modifier(s)
    • TODO
- [ ] Vim Modes
- v ..................... visual
- v ..................... visual-line
- i ....................... insert
- EscapeKey ... normal
- \: ....................... command TODO: This currently renders a command bar for input, but does nothing.

Output display

  • Fix the new C# project, and any other code that parsed the terminal output.
    • Ever since I changed how the output is done, these have broken by a few character positions.
  • Store the positioning of the panel tabs in local storage?
    • In otherwords, solution explorer on the left or on the right, etc...
  • Website link in terminal should be a clickable navlink.

Partitions

TextEditor

  • Presentation layer for match brace
  • Presentation layer for whitespace
  • { Ctrl + . } => QuickActions/Refactor
  • Code snippet provider
  • Create edit blocks for more things that feel natural.
  • The text editor tabs should scroll into view the active file (when one picks a different active file).
    • Visual Studio is measuring the space that is available, then rendering as many tabs as will fill the space. If a tab is out of view, then it is set as the final tab which is rendered. It gets forced to be one of the tabs. If no other tab could be rendered, then it is forced as the only tab that renders. This specific point is presumed.
  • Batch removal of text.
  • { Ctrl + Alt + (ArrowLeft | ArrowRight) } => Move by camel casing
  • Allow for, in place of the default text editor header, one that shows what Visual Studio does.
    • In other words, the project, class, (method | some other class defintion)
  • Jump stack
  • Undo and Redo should remember the cursor position and selection, and restore this data when invoked.
  • Collapsible rows.

TreeView-MultiSelect

  • Copy,
  • Cut,
  • Paste,

Bugs

  • If the longest line in the text editor contains a tab key, the horizontal scrollbar is drawn incorrectly, as the 'tab key' is only measured as 1 character width, when it in reality is 4 character width.
  • Go to matching character: '}' was the final character of a file, I did go to matching character, It froze. Was it because '}' was the final character of the file?
  • Cannot { Alt + F4 } while focused on the text editor
  • Make a scoped Service for the "ParentOfCutFile" that is in all the {SomeComponentHere}ContextMenu.razor files.

[Feature] Event handler for application resize

See the following GIF were one can make a Dialog disappear because one can decrease its width and height to any amount.

enforceMinimumSize

Fix idea

  • When the user's browser is resized. Then, enforce a minimum width and height for any resizable Blazor Components based on some percentage of the browser's width and height.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.