diff --git a/src/Analysis/Ast/Impl/Linting/UndefinedVariables/ExpressionWalker.cs b/src/Analysis/Ast/Impl/Linting/UndefinedVariables/ExpressionWalker.cs index 011fe16f2..64e39f092 100644 --- a/src/Analysis/Ast/Impl/Linting/UndefinedVariables/ExpressionWalker.cs +++ b/src/Analysis/Ast/Impl/Linting/UndefinedVariables/ExpressionWalker.cs @@ -16,8 +16,10 @@ using System.Collections.Generic; using System.Linq; using Microsoft.Python.Analysis.Analyzer; +using Microsoft.Python.Analysis.Analyzer.Handlers; using Microsoft.Python.Analysis.Types; using Microsoft.Python.Core; +using Microsoft.Python.Core.OS; using Microsoft.Python.Core.Text; using Microsoft.Python.Parsing.Ast; using Microsoft.Python.Parsing.Extensions; @@ -55,6 +57,7 @@ public override bool Walk(ListComprehension node) { return false; } + public override bool Walk(SetComprehension node) { node.Walk(new ComprehensionWalker(_walker, _localNames, _localNameExpressions)); return false; @@ -75,6 +78,11 @@ public override bool Walk(NamedExpression node) { return false; } + public override bool Walk(IfStatement node) + => node.WalkIfWithSystemConditions(_walker, + _walker.Analysis.Document.Interpreter.LanguageVersion, + _walker.Services.GetService()); + public override bool Walk(NameExpression node) { if (_localNames?.Contains(node.Name) == true) { return false; diff --git a/src/Analysis/Ast/Test/LintUndefinedVarsTests.cs b/src/Analysis/Ast/Test/LintUndefinedVarsTests.cs index dec8c849a..60f839d54 100644 --- a/src/Analysis/Ast/Test/LintUndefinedVarsTests.cs +++ b/src/Analysis/Ast/Test/LintUndefinedVarsTests.cs @@ -832,6 +832,22 @@ public async Task AugmentedAssignToUndefined() { d[0].SourceSpan.Should().Be(2, 1, 2, 2); } + [TestMethod, Priority(0)] + public async Task PlatformSpecific() { + const string code = @" +import sys + +if sys.platform == 'linux': + aVariable='Hello Linux' + print(aVariable) + +else: + aVariable = 'Hello Other'' + print(aVariable) +"; + var d = await LintAsync(code); + d.Should().BeEmpty(); + } private async Task> LintAsync(string code, InterpreterConfiguration configuration = null) { var analysis = await GetAnalysisAsync(code, configuration ?? PythonVersions.LatestAvailable3X);