Skip to content

What the hosted PSSA could look like #1078

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

Closed

Conversation

TylerLeonhardt
Copy link
Member

@TylerLeonhardt TylerLeonhardt commented Oct 31, 2019

This is DRAFT. CI will fail because there's no nuget package on nuget.org!

This is the bare minimum work that I would do to adopt the hosted analyzer. It already cuts the code in AnalysisService.cs by half!

I recommend just looking at my version of the AnalysisService.cs and looking around for HostedAnalyzer, Analyze(, Format( - so you can see how the hosted analyzer is used there.

Some additional work that could be done:

  • Replace all instances of Hashtable (when pertaining to PSSA) with the proper Settings type
  • Remove the ScriptFileMarker type which seems to be some intermediate type between a DiagnosticRecord from PSSA and the outgoing (aka language server protocol) type of Diagnostic. I tried it, it's totally possible to switch over to using Diagnostic everywhere ScriptFileMarker is used. That would remove another type and a good chunk of code.
  • Now that ScriptFileMarker is gone, we can continue to remove random types like MarkerCorrection could be removed but this involves understanding CodeAction request more

cc @JamesWTruher
Some notes that I took on the Hosted Analyzer:

  • Analyze() - Invoke-ScriptAnalyzer has a -Severity param. Can we have a severity param?
  • Fix() - Invoke-Formatter Has a -Range parameter that we use. Can we have a range parameter?
  • Settings.*RuleArgument() - should return Settings objects so we can chain them like the builder pattern
  • Format() - Invoke-Formatter Has a -Range parameter that we use. Can we have a range parameter?
  • Can it be possible to create a Settings object from a list of strings (which are the rules we care about)?
  • Fix() & Format() - should those also have the ability to pass the AST in addition to the script? No they should not.
  • Cancellation support... this might be too much work... but it'd be nice. I've kinda worked around it in this PR by "cancelling" anything else after we get a response back from Analyze() deferred.

@PowerShell PowerShell deleted a comment Nov 27, 2019
@rjmholt rjmholt self-requested a review November 27, 2019 19:04
@TylerLeonhardt
Copy link
Member Author

Codacy Here is an overview of what got changed by this pull request:

Issues
======
+ Solved 18
- Added 1
           

Complexity increasing per file
==============================
- src/PowerShellEditorServices/Services/Analysis/AnalysisService.cs  5
- src/PowerShellEditorServices/Services/Analysis/MarkerCorrection.cs  1
- src/PowerShellEditorServices/Services/Analysis/DiagnosticCreationHelper.cs  4
         

Complexity decreasing per file
==============================
+ src/PowerShellEditorServices/Services/TextDocument/Handlers/FormattingHandlers.cs  -1
+ src/PowerShellEditorServices/Services/PowerShellContext/Handlers/GetCommentHelpHandler.cs  -4
         

See the complete overview on Codacy

}
// If cancellation didn't throw an exception,
// clean up the existing token
_existingRequestCancellation.Dispose();
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_analyzerSettings = _analyzer.CreateSettings(s_includedRules);
_analyzerSettings.Severities.AddRange(new [] {
RuleSeverity.Error.ToString(),
RuleSeverity.Information.ToString(),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be RuleSeverity.Warning? Why is it that these are strings if we've gone to the effort to load the types?

scriptFile.DiagnosticMarkers);
}
}
if (!ct.CanBeCanceled || ct.IsCancellationRequested)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we break if we can't cancel the token?

@andyleejordan
Copy link
Member

@TylerLeonhardt do you think there's any value in looking at this PR in particular 5 years later, or should I just close it and keep the idea in the back of minds of hosting PSSA? (We all know it would be nice to do, especially combined with a PSSA rewrite.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants