Skip to content

Commit

Permalink
Workaround wrong FCS symbols for optional method parameter declarations
Browse files Browse the repository at this point in the history
  • Loading branch information
auduchinok committed Nov 23, 2020
1 parent 5760cad commit cd9b0b4
Show file tree
Hide file tree
Showing 13 changed files with 67 additions and 4 deletions.
Expand Up @@ -243,7 +243,7 @@ private ResolvedSymbols CreateFileResolvedSymbols()

private static bool CanIgnoreSymbol([NotNull] FSharpSymbol symbol) =>
symbol is FSharpEntity ||
symbol is FSharpMemberOrFunctionOrValue mfv && mfv.LogicalName == "op_RangeStep";
symbol is FSharpMemberOrFunctionOrValue mfv && (mfv.LogicalName == "op_RangeStep" || mfv.IsConstructor);

private TextRange FixRange(int startOffset, int endOffset, [CanBeNull] string logicalName, IBuffer buffer,
CachingLexer lexer)
Expand All @@ -268,7 +268,7 @@ private ResolvedSymbols CreateFileResolvedSymbols()
return new TextRange(startOffset, endOffset);

// todo: use lexer buffer
if (lexer.FindTokenAt(endOffset - 1) && lexer.TokenType is TokenNodeType tokenType)
if (lexer.FindTokenAt(endOffset - 1) && lexer.TokenType is { } tokenType)
{
var opText = tokenType == FSharpTokenType.SYMBOLIC_OP ? sourceName : logicalName;
return new TextRange(endOffset - opText.Length, endOffset);
Expand Down
@@ -0,0 +1,2 @@
type T() =
static member M1(?a) = ()
@@ -0,0 +1,7 @@
type |T|(0)() =
static member |M1|(1)(?|a|(2)) = ()

---------------------------------------------------------
(0): ReSharper F# Class Identifier:
(1): ReSharper F# Method Identifier:
(2): ReSharper F# Value Identifier:
@@ -0,0 +1,2 @@
type T() =
static member private M1(?a) = ()
@@ -0,0 +1,7 @@
type |T|(0)() =
static member private |M1|(1)(?|a|(2)) = ()

---------------------------------------------------------
(0): ReSharper F# Class Identifier:
(1): ReSharper F# Method Identifier:
(2): ReSharper F# Value Identifier:
@@ -0,0 +1,2 @@
type T =
static member private M(?a) = ()
@@ -0,0 +1,39 @@
Language: PsiLanguageType:F#
IFSharpImplFile
IAnonModuleDeclaration
ITypeDeclarationGroup
FSharpTokenType+TypeTokenElement(type:TYPE, text:type)
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
IFSharpTypeDeclaration
FSharpIdentifierToken(type:IDENTIFIER, text:T)
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
FSharpTokenType+EqualsTokenElement(type:EQUALS, text:=)
NewLine(type:NEW_LINE, text:\n) spaces:"\n"
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
ITypeMemberDeclarationList
IMemberDeclaration
FSharpTokenType+StaticTokenElement(type:STATIC, text:static)
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
FSharpTokenType+MemberTokenElement(type:MEMBER, text:member)
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
FSharpTokenType+PrivateTokenElement(type:PRIVATE, text:private)
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
FSharpIdentifierToken(type:IDENTIFIER, text:M)
IParametersPatternDeclaration
IParenPat
FSharpTokenType+LparenTokenElement(type:LPAREN, text:()
IOptionalValPat
FSharpTokenType+QmarkTokenElement(type:QMARK, text:?)
ILocalReferencePat
IExpressionReferenceName
FSharpIdentifierToken(type:IDENTIFIER, text:a)
FSharpTokenType+RparenTokenElement(type:RPAREN, text:))
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
FSharpTokenType+EqualsTokenElement(type:EQUALS, text:=)
Whitespace(type:WHITE_SPACE, text: ) spaces:" "
IChameleonExpression
IUnitExpr
FSharpTokenType+LparenTokenElement(type:LPAREN, text:()
FSharpTokenType+RparenTokenElement(type:RPAREN, text:))
NewLine(type:NEW_LINE, text:\n) spaces:"\n"

Expand Up @@ -57,3 +57,6 @@ type IdentifierHighlightingTest() =
[<Test>] member x.``Type aliases 02 - Simple types without System dependence``() = x.DoNamedTest()
[<Test>] member x.``Type aliases 03 - Units of Measure``() = x.DoNamedTest()
[<Test>] member x.``Type aliases 04 - Core abbreviations``() = x.DoNamedTest()

[<Test>] member x.``Method - Parameters - Optional 01``() = x.DoNamedTest()
[<Test>] member x.``Method - Parameters - Optional 02 - Private``() = x.DoNamedTest()
Expand Up @@ -368,10 +368,11 @@ type FSharpParserTest() =

[<Test>] member x.``Type member - Member 01 - Wild self id``() = x.DoNamedTest()

[<Test>] member x.``Type member - Member - Method - Parameters - Optional 01``() = x.DoNamedTest()
[<Test>] member x.``Type member - Member - Method - Parameters - Optional 02``() = x.DoNamedTest()
[<Test>] member x.``Type member - Member - Method - Parameters - Optional 03 - Private``() = x.DoNamedTest()
[<Test>] member x.``Type member - Member - Method - Parameters 01``() = x.DoNamedTest()
[<Test>] member x.``Type member - Member - Method - Parameters 02``() = x.DoNamedTest()
[<Test>] member x.``Type member - Member - Method - Parameters 03 - Optional``() = x.DoNamedTest()
[<Test>] member x.``Type member - Member - Method - Parameters 04 - Optional``() = x.DoNamedTest()

[<Test>] member x.``Type member - Member - Method - Curried Parameters 01``() = x.DoNamedTest()

Expand Down

0 comments on commit cd9b0b4

Please sign in to comment.