Skip to content

Commit 7c56ea8

Browse files
committed
Restore support for PowerShell v3 and v4
This change resolves some compatibility issues with PowerShell v3 and v4. The new PowerShellEditorServices.psm1 file was using the ::new() constructor syntax that is only available in PowerShell v5 and higher. Also, the AstVisitor2 class was causing issues with Add-Type when being loaded into the older versions of PowerShell. Issue #276 tracks the need for bringing AstVisitor2 usage back after a more appropriate multi-version support strategy is designed. Related to PowerShell/vscode-powershell#248
1 parent 5940ad1 commit 7c56ea8

File tree

3 files changed

+77
-70
lines changed

3 files changed

+77
-70
lines changed

module/PowerShellEditorServices/PowerShellEditorServices.psm1

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,17 @@ function Start-EditorServicesHost {
5050
)
5151

5252
$editorServicesHost = $null
53-
$hostDetails = [Microsoft.PowerShell.EditorServices.Session.HostDetails]::new($HostName, $HostProfileId, [System.Version]::new($HostVersion))
53+
$hostDetails = New-Object Microsoft.PowerShell.EditorServices.Session.HostDetails @($HostName, $HostProfileId, (New-Object System.Version @($HostVersion)))
5454

5555
try {
5656
$editorServicesHost =
57-
[Microsoft.PowerShell.EditorServices.Host.EditorServicesHost]::new(
57+
New-Object Microsoft.PowerShell.EditorServices.Host.EditorServicesHost @(
5858
$hostDetails,
5959
$BundledModulesPath,
60-
$WaitForDebugger.IsPresent);
60+
$WaitForDebugger.IsPresent)
6161

6262
# Build the profile paths using the root paths of the current $profile variable
63-
$profilePaths = [Microsoft.PowerShell.EditorServices.Session.ProfilePaths]::new(
63+
$profilePaths = New-Object Microsoft.PowerShell.EditorServices.Session.ProfilePaths @(
6464
$hostDetails.ProfileId,
6565
[System.IO.Path]::GetDirectoryName($profile.AllUsersAllHosts),
6666
[System.IO.Path]::GetDirectoryName($profile.CurrentUserAllHosts));

src/PowerShellEditorServices/Language/AstOperations.cs

+11-9
Original file line numberDiff line numberDiff line change
@@ -197,15 +197,17 @@ static public IEnumerable<SymbolReference> FindSymbolsInDocument(Ast scriptAst,
197197
{
198198
IEnumerable<SymbolReference> symbolReferences = null;
199199

200-
if (powerShellVersion >= new Version(5,0))
201-
{
202-
#if PowerShellv5
203-
FindSymbolsVisitor2 findSymbolsVisitor = new FindSymbolsVisitor2();
204-
scriptAst.Visit(findSymbolsVisitor);
205-
symbolReferences = findSymbolsVisitor.SymbolReferences;
206-
#endif
207-
}
208-
else
200+
// TODO: Restore this when we figure out how to support multiple
201+
// PS versions in the new PSES-as-a-module world (issue #276)
202+
// if (powerShellVersion >= new Version(5,0))
203+
// {
204+
//#if PowerShellv5
205+
// FindSymbolsVisitor2 findSymbolsVisitor = new FindSymbolsVisitor2();
206+
// scriptAst.Visit(findSymbolsVisitor);
207+
// symbolReferences = findSymbolsVisitor.SymbolReferences;
208+
//#endif
209+
// }
210+
// else
209211
{
210212
FindSymbolsVisitor findSymbolsVisitor = new FindSymbolsVisitor();
211213
scriptAst.Visit(findSymbolsVisitor);

src/PowerShellEditorServices/Language/FindSymbolsVisitor2.cs

+62-57
Original file line numberDiff line numberDiff line change
@@ -9,70 +9,75 @@
99
namespace Microsoft.PowerShell.EditorServices
1010
{
1111
#if PowerShellv5
12-
/// <summary>
13-
/// The visitor used to find all the symbols (function and class defs) in the AST.
14-
/// </summary>
15-
/// <remarks>
16-
/// Requires PowerShell v5 or higher
17-
/// </remarks>
18-
internal class FindSymbolsVisitor2 : AstVisitor2
19-
{
20-
private FindSymbolsVisitor findSymbolsVisitor;
2112

22-
public List<SymbolReference> SymbolReferences
23-
{
24-
get
25-
{
26-
return this.findSymbolsVisitor.SymbolReferences;
27-
}
28-
}
13+
// TODO: Restore this when we figure out how to support multiple
14+
// PS versions in the new PSES-as-a-module world (issue #276)
2915

30-
public FindSymbolsVisitor2()
31-
{
32-
this.findSymbolsVisitor = new FindSymbolsVisitor();
33-
}
16+
///// <summary>
17+
///// The visitor used to find all the symbols (function and class defs) in the AST.
18+
///// </summary>
19+
///// <remarks>
20+
///// Requires PowerShell v5 or higher
21+
///// </remarks>
22+
/////
23+
//internal class FindSymbolsVisitor2 : AstVisitor2
24+
//{
25+
// private FindSymbolsVisitor findSymbolsVisitor;
3426

35-
/// <summary>
36-
/// Adds each function defintion as a
37-
/// </summary>
38-
/// <param name="functionDefinitionAst">A functionDefinitionAst object in the script's AST</param>
39-
/// <returns>A decision to stop searching if the right symbol was found,
40-
/// or a decision to continue if it wasn't found</returns>
41-
public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst)
42-
{
43-
return this.findSymbolsVisitor.VisitFunctionDefinition(functionDefinitionAst);
44-
}
27+
// public List<SymbolReference> SymbolReferences
28+
// {
29+
// get
30+
// {
31+
// return this.findSymbolsVisitor.SymbolReferences;
32+
// }
33+
// }
4534

46-
/// <summary>
47-
/// Checks to see if this variable expression is the symbol we are looking for.
48-
/// </summary>
49-
/// <param name="variableExpressionAst">A VariableExpressionAst object in the script's AST</param>
50-
/// <returns>A descion to stop searching if the right symbol was found,
51-
/// or a decision to continue if it wasn't found</returns>
52-
public override AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst)
53-
{
54-
return this.findSymbolsVisitor.VisitVariableExpression(variableExpressionAst);
55-
}
35+
// public FindSymbolsVisitor2()
36+
// {
37+
// this.findSymbolsVisitor = new FindSymbolsVisitor();
38+
// }
5639

57-
public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
58-
{
59-
IScriptExtent nameExtent = new ScriptExtent()
60-
{
61-
Text = configurationDefinitionAst.InstanceName.Extent.Text,
62-
StartLineNumber = configurationDefinitionAst.Extent.StartLineNumber,
63-
EndLineNumber = configurationDefinitionAst.Extent.EndLineNumber,
64-
StartColumnNumber = configurationDefinitionAst.Extent.StartColumnNumber,
65-
EndColumnNumber = configurationDefinitionAst.Extent.EndColumnNumber
66-
};
40+
// /// <summary>
41+
// /// Adds each function defintion as a
42+
// /// </summary>
43+
// /// <param name="functionDefinitionAst">A functionDefinitionAst object in the script's AST</param>
44+
// /// <returns>A decision to stop searching if the right symbol was found,
45+
// /// or a decision to continue if it wasn't found</returns>
46+
// public override AstVisitAction VisitFunctionDefinition(FunctionDefinitionAst functionDefinitionAst)
47+
// {
48+
// return this.findSymbolsVisitor.VisitFunctionDefinition(functionDefinitionAst);
49+
// }
6750

68-
this.findSymbolsVisitor.SymbolReferences.Add(
69-
new SymbolReference(
70-
SymbolType.Configuration,
71-
nameExtent));
51+
// /// <summary>
52+
// /// Checks to see if this variable expression is the symbol we are looking for.
53+
// /// </summary>
54+
// /// <param name="variableExpressionAst">A VariableExpressionAst object in the script's AST</param>
55+
// /// <returns>A descion to stop searching if the right symbol was found,
56+
// /// or a decision to continue if it wasn't found</returns>
57+
// public override AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst)
58+
// {
59+
// return this.findSymbolsVisitor.VisitVariableExpression(variableExpressionAst);
60+
// }
7261

73-
return AstVisitAction.Continue;
74-
}
75-
}
62+
// public override AstVisitAction VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
63+
// {
64+
// IScriptExtent nameExtent = new ScriptExtent()
65+
// {
66+
// Text = configurationDefinitionAst.InstanceName.Extent.Text,
67+
// StartLineNumber = configurationDefinitionAst.Extent.StartLineNumber,
68+
// EndLineNumber = configurationDefinitionAst.Extent.EndLineNumber,
69+
// StartColumnNumber = configurationDefinitionAst.Extent.StartColumnNumber,
70+
// EndColumnNumber = configurationDefinitionAst.Extent.EndColumnNumber
71+
// };
72+
73+
// this.findSymbolsVisitor.SymbolReferences.Add(
74+
// new SymbolReference(
75+
// SymbolType.Configuration,
76+
// nameExtent));
77+
78+
// return AstVisitAction.Continue;
79+
// }
80+
//}
7681
#endif
7782
}
7883

0 commit comments

Comments
 (0)