Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 6b13145

Browse files
committed
Move jsxElements out of TypeScript grammar
Also removes typeAssertion from TSX grammar
1 parent a8a36ad commit 6b13145

File tree

12 files changed

+92
-248
lines changed

12 files changed

+92
-248
lines changed

semantic.cabal

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,14 @@ library
202202
, Language.Ruby.Assignment
203203
, Language.Ruby.PrettyPrint
204204
, Language.Ruby.Syntax
205+
, Language.TSX.Assignment
206+
, Language.TSX.Syntax
207+
, Language.TSX.Syntax.JSX
205208
, Language.TypeScript.Assignment
206209
, Language.TypeScript.Resolution
207210
, Language.TypeScript.Syntax
208211
, Language.TypeScript.Syntax.Import
209212
, Language.TypeScript.Syntax.JavaScript
210-
, Language.TypeScript.Syntax.JSX
211213
, Language.TypeScript.Syntax.TypeScript
212214
, Language.TypeScript.Syntax.Types
213215
, Language.PHP.Assignment

src/Data/Abstract/AccessControls/Instances.hs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import qualified Language.Markdown.Syntax as Markdown
2222
import qualified Language.PHP.Syntax as PHP
2323
import qualified Language.Python.Syntax as Python
2424
import qualified Language.Ruby.Syntax as Ruby
25+
import qualified Language.TSX.Syntax as TSX
2526
import qualified Language.TypeScript.Syntax as TypeScript
2627
import Data.Quieterm
2728

@@ -454,25 +455,26 @@ instance AccessControls1 Ruby.LowPrecedenceOr
454455
instance AccessControls1 Ruby.Module
455456
instance AccessControls1 Ruby.ZSuper
456457

458+
instance AccessControls1 TSX.JsxElement
459+
instance AccessControls1 TSX.JsxOpeningElement
460+
instance AccessControls1 TSX.JsxSelfClosingElement
461+
instance AccessControls1 TSX.JsxAttribute
462+
instance AccessControls1 TSX.JsxNamespaceName
463+
instance AccessControls1 TSX.JsxText
464+
instance AccessControls1 TSX.JsxExpression
465+
instance AccessControls1 TSX.JsxClosingElement
466+
instance AccessControls1 TSX.JsxFragment
467+
457468
instance AccessControls1 TypeScript.AnnotatedExpression
458469
instance AccessControls1 TypeScript.JavaScriptRequire
459470
instance AccessControls1 TypeScript.Debugger
460471
instance AccessControls1 TypeScript.Super
461472
instance AccessControls1 TypeScript.Undefined
462473
instance AccessControls1 TypeScript.With
463-
instance AccessControls1 TypeScript.JsxElement
464-
instance AccessControls1 TypeScript.JsxOpeningElement
465-
instance AccessControls1 TypeScript.JsxSelfClosingElement
466-
instance AccessControls1 TypeScript.JsxAttribute
467474
instance AccessControls1 TypeScript.OptionalParameter
468475
instance AccessControls1 TypeScript.RequiredParameter
469476
instance AccessControls1 TypeScript.RestParameter
470-
instance AccessControls1 TypeScript.JsxNamespaceName
471-
instance AccessControls1 TypeScript.JsxText
472-
instance AccessControls1 TypeScript.JsxExpression
473-
instance AccessControls1 TypeScript.JsxClosingElement
474477
instance AccessControls1 TypeScript.ImplementsClause
475-
instance AccessControls1 TypeScript.JsxFragment
476478
instance AccessControls1 TypeScript.Import
477479
instance AccessControls1 TypeScript.QualifiedAliasedImport
478480
instance AccessControls1 TypeScript.QualifiedExportFrom

src/Data/Abstract/Evaluatable.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ instance HasPrelude 'Ruby where
163163
defineClass (Declaration (X.name "Object")) [] $ do
164164
defineBuiltIn (Declaration $ X.name "inspect") Default Public Show
165165

166+
instance HasPrelude 'TSX
167+
166168
instance HasPrelude 'TypeScript where
167169
definePrelude _ = do
168170
defineSelf

src/Language/Go/Assignment.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ floatLiteral :: Assignment Term
262262
floatLiteral = makeTerm <$> symbol FloatLiteral <*> (Literal.Float <$> source)
263263

264264
identifier :: Assignment Term
265-
identifier = makeTerm <$> (symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') <*> (Syntax.Identifier . name <$> source)
265+
identifier = makeTerm <$> symbol Identifier <*> (Syntax.Identifier . name <$> source)
266266

267267
imaginaryLiteral :: Assignment Term
268268
imaginaryLiteral = makeTerm <$> symbol ImaginaryLiteral <*> (Literal.Complex <$> source)

src/Language/TSX/Assignment.hs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ expression :: Assignment Term
219219
expression = handleError everything
220220
where
221221
everything = choice [
222-
typeAssertion,
223222
asExpression,
224223
nonNullExpression',
225224
importAlias',
@@ -371,9 +370,6 @@ implementsClause' = makeTerm <$> symbol Grammar.ImplementsClause <*> children (T
371370
super :: Assignment Term
372371
super = makeTerm <$> symbol Grammar.Super <*> (TSX.Syntax.Super <$ rawSource)
373372

374-
typeAssertion :: Assignment Term
375-
typeAssertion = makeTerm <$> symbol Grammar.TypeAssertion <*> children (TSX.Syntax.TypeAssertion <$> term typeArguments' <*> term expression)
376-
377373
asExpression :: Assignment Term
378374
asExpression = makeTerm <$> symbol AsExpression <*> children (Expression.Cast <$> term expression <*> term (ty <|> templateString))
379375

@@ -402,7 +398,7 @@ false :: Assignment Term
402398
false = makeTerm <$> symbol Grammar.False <*> (Literal.false <$ rawSource)
403399

404400
identifier :: Assignment Term
405-
identifier = makeTerm <$> (symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') <*> (Syntax.Identifier . name <$> source)
401+
identifier = makeTerm <$> symbol Identifier <*> (Syntax.Identifier . name <$> source)
406402

407403
class' :: Assignment Term
408404
class' = makeClass <$> symbol Class <*> children ((,,,,) <$> manyTerm decorator <*> term typeIdentifier <*> (symbol TypeParameters *> children (manyTerm typeParameter') <|> pure []) <*> (classHeritage' <|> pure []) <*> classBodyStatements)
@@ -754,7 +750,7 @@ importStatement = makeImportTerm <$> symbol Grammar.ImportStatement <*> childr
754750
makeImportTerm loc ([x], from) = makeImportTerm1 loc from x
755751
makeImportTerm loc (xs, from) = makeTerm loc $ fmap (makeImportTerm1 loc from) xs
756752
importSymbol = symbol Grammar.ImportSpecifier *> children (makeNameAliasPair <$> rawIdentifier <*> ((Just <$> rawIdentifier) <|> pure Nothing))
757-
rawIdentifier = (symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') *> (name <$> source)
753+
rawIdentifier = symbol Identifier *> (name <$> source)
758754
makeNameAliasPair from (Just alias) = (from, alias)
759755
makeNameAliasPair from Nothing = (from, from)
760756

@@ -813,7 +809,7 @@ exportStatement = makeTerm <$> symbol Grammar.ExportStatement <*> children (flip
813809
<|> symbol Grammar.ExportSpecifier *> children (makeNameAliasPair <$> rawIdentifier <*> pure Nothing)
814810
makeNameAliasPair from (Just alias) = TSX.Syntax.Alias from alias
815811
makeNameAliasPair from Nothing = TSX.Syntax.Alias from from
816-
rawIdentifier = (symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') *> (name <$> source)
812+
rawIdentifier = symbol Identifier *> (name <$> source)
817813
-- TODO: Need to validate that inline comments are still handled with this change in assigning to Path and not a Term.
818814
fromClause = symbol Grammar.String *> (TypeScript.Resolution.importPath <$> source)
819815

@@ -889,7 +885,7 @@ variableDeclarator =
889885
where
890886
makeVarDecl loc (subject, annotations, value) = makeTerm loc (Statement.Assignment [annotations] subject value)
891887

892-
requireCall = symbol CallExpression *> children ((symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') *> do
888+
requireCall = symbol CallExpression *> children (symbol Identifier *> do
893889
s <- source
894890
guard (s == "require")
895891
symbol Arguments *> children (symbol Grammar.String *> (TypeScript.Resolution.importPath <$> source))

src/Language/TSX/Syntax/JSX.hs

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{-# LANGUAGE DeriveAnyClass, DerivingVia, DuplicateRecordFields #-}
22
{-# OPTIONS_GHC -Wno-missing-export-lists #-}
3-
module Language.TypeScript.Syntax.JSX where
3+
module Language.TSX.Syntax.JSX where
44

55
import Prologue
66

@@ -55,53 +55,6 @@ data JsxAttribute a = JsxAttribute { jsxAttributeTarget :: !a, jsxAttributeValue
5555

5656
instance Evaluatable JsxAttribute
5757

58-
newtype ImplementsClause a = ImplementsClause { implementsClauseTypes :: [a] }
59-
deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, NFData1, Ord, Show, ToJSONFields1, Traversable)
60-
deriving (Eq1, Show1, Ord1) via Generically ImplementsClause
61-
62-
instance Evaluatable ImplementsClause
63-
64-
data OptionalParameter a = OptionalParameter { optionalParameterContext :: ![a], optionalParameterSubject :: !a, optionalParameterAccessControl :: AccessControl }
65-
deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, NFData1, Ord, Show, ToJSONFields1, Traversable)
66-
deriving (Eq1, Show1, Ord1) via Generically OptionalParameter
67-
68-
instance Evaluatable OptionalParameter
69-
70-
data RequiredParameter a = RequiredParameter { requiredParameterContext :: [a], requiredParameterSubject :: a, requiredParameterValue :: a, requiredParameterAccessControl :: AccessControl }
71-
deriving (Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, NFData1, Ord, Show, ToJSONFields1, Traversable)
72-
deriving (Eq1, Show1, Ord1) via Generically RequiredParameter
73-
74-
instance Declarations1 RequiredParameter where
75-
liftDeclaredName declaredName RequiredParameter{..} = declaredName requiredParameterSubject
76-
77-
instance Evaluatable RequiredParameter where
78-
eval eval ref RequiredParameter{..} = do
79-
span <- ask @Span
80-
_ <- declareMaybeName (declaredName requiredParameterSubject) Default Public span ScopeGraph.RequiredParameter Nothing
81-
82-
lhs <- ref requiredParameterSubject
83-
rhs <- eval requiredParameterValue
84-
85-
case declaredName requiredParameterValue of
86-
Just rhsName -> do
87-
assocScope <- associatedScope (Declaration rhsName)
88-
case assocScope of
89-
Just assocScope' -> do
90-
objectScope <- newScope (Map.singleton Import [ assocScope' ])
91-
putSlotDeclarationScope lhs (Just objectScope) -- TODO: not sure if this is right
92-
Nothing ->
93-
pure ()
94-
Nothing ->
95-
pure ()
96-
assign lhs rhs
97-
pure rhs
98-
99-
data RestParameter a = RestParameter { restParameterContext :: ![a], restParameterSubject :: !a }
100-
deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, NFData1, Ord, Show, ToJSONFields1, Traversable)
101-
deriving (Eq1, Show1, Ord1) via Generically RestParameter
102-
103-
instance Evaluatable RestParameter
104-
10558
newtype JsxFragment a = JsxFragment { terms :: [a] }
10659
deriving (Declarations1, Diffable, Eq, Foldable, FreeVariables1, Functor, Generic1, Hashable1, NFData1, Ord, Show, ToJSONFields1, Traversable)
10760
deriving (Eq1, Show1, Ord1) via Generically JsxFragment

src/Language/TypeScript/Assignment.hs

Lines changed: 4 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,6 @@ type Syntax = '[
169169
, TypeScript.Syntax.ClassHeritage
170170
, TypeScript.Syntax.AbstractClass
171171
, TypeScript.Syntax.ImplementsClause
172-
, TypeScript.Syntax.JsxElement
173-
, TypeScript.Syntax.JsxSelfClosingElement
174-
, TypeScript.Syntax.JsxOpeningElement
175-
, TypeScript.Syntax.JsxText
176-
, TypeScript.Syntax.JsxClosingElement
177-
, TypeScript.Syntax.JsxExpression
178-
, TypeScript.Syntax.JsxAttribute
179-
, TypeScript.Syntax.JsxFragment
180-
, TypeScript.Syntax.JsxNamespaceName
181172
, TypeScript.Syntax.OptionalParameter
182173
, TypeScript.Syntax.RequiredParameter
183174
, TypeScript.Syntax.RestParameter
@@ -227,8 +218,6 @@ expression = handleError everything
227218
super,
228219
object,
229220
array,
230-
jsxElement',
231-
jsxFragment,
232221
class',
233222
anonymousClass,
234223
function,
@@ -402,7 +391,7 @@ false :: Assignment Term
402391
false = makeTerm <$> symbol Grammar.False <*> (Literal.false <$ rawSource)
403392

404393
identifier :: Assignment Term
405-
identifier = makeTerm <$> (symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') <*> (Syntax.Identifier . name <$> source)
394+
identifier = makeTerm <$> symbol Identifier <*> (Syntax.Identifier . name <$> source)
406395

407396
class' :: Assignment Term
408397
class' = makeClass <$> symbol Class <*> children ((,,,,) <$> manyTerm decorator <*> term typeIdentifier <*> (symbol TypeParameters *> children (manyTerm typeParameter') <|> pure []) <*> (classHeritage' <|> pure []) <*> classBodyStatements)
@@ -414,46 +403,6 @@ object = makeTerm <$> (symbol Object <|> symbol ObjectPattern) <*> children (Lit
414403
array :: Assignment Term
415404
array = makeTerm <$> (symbol Array <|> symbol ArrayPattern) <*> children (Literal.Array <$> manyTerm (expression <|> spreadElement))
416405

417-
jsxElement' :: Assignment Term
418-
jsxElement' = choice [ jsxElement, jsxSelfClosingElement ]
419-
420-
jsxElement :: Assignment Term
421-
jsxElement = makeTerm <$> symbol Grammar.JsxElement <*> children (TypeScript.Syntax.JsxElement <$> term jsxOpeningElement' <*> manyTerm jsxChild <*> term jsxClosingElement')
422-
423-
jsxFragment :: Assignment Term
424-
jsxFragment = makeTerm <$> symbol Grammar.JsxFragment <*> children (TypeScript.Syntax.JsxFragment <$> manyTerm jsxChild)
425-
426-
jsxChild :: Assignment Term
427-
jsxChild = choice [ jsxElement', jsxExpression', jsxText ]
428-
429-
jsxSelfClosingElement :: Assignment Term
430-
jsxSelfClosingElement = makeTerm <$> symbol Grammar.JsxSelfClosingElement <*> children (TypeScript.Syntax.JsxSelfClosingElement <$> term jsxElementName <*> manyTerm jsxAttribute')
431-
432-
jsxAttribute' :: Assignment Term
433-
jsxAttribute' = jsxAttribute <|> jsxExpression'
434-
435-
jsxOpeningElement' :: Assignment Term
436-
jsxOpeningElement' = makeTerm <$> symbol Grammar.JsxOpeningElement <*> children (TypeScript.Syntax.JsxOpeningElement <$> term jsxElementName <*> manyTerm jsxAttribute')
437-
438-
jsxElementName :: Assignment Term
439-
jsxElementName = choice [ identifier, nestedIdentifier, jsxNamespaceName ]
440-
441-
jsxNamespaceName :: Assignment Term
442-
jsxNamespaceName = makeTerm <$> symbol Grammar.JsxNamespaceName <*> children (TypeScript.Syntax.JsxNamespaceName <$> identifier <*> identifier)
443-
444-
jsxExpression' :: Assignment Term
445-
jsxExpression' = makeTerm <$> symbol Grammar.JsxExpression <*> children (TypeScript.Syntax.JsxExpression <$> term (expressions <|> spreadElement <|> emptyTerm))
446-
447-
jsxText :: Assignment Term
448-
jsxText = makeTerm <$> symbol Grammar.JsxText <*> (TypeScript.Syntax.JsxText <$> source)
449-
450-
jsxClosingElement' :: Assignment Term
451-
jsxClosingElement' = makeTerm <$> symbol Grammar.JsxClosingElement <*> children (TypeScript.Syntax.JsxClosingElement <$> term jsxElementName)
452-
453-
jsxAttribute :: Assignment Term
454-
jsxAttribute = makeTerm <$> symbol Grammar.JsxAttribute <*> children (TypeScript.Syntax.JsxAttribute <$> term (propertyIdentifier <|> jsxNamespaceName) <*> (term jsxAttributeValue <|> emptyTerm))
455-
where jsxAttributeValue = choice [ string, jsxExpression', jsxElement', jsxFragment ]
456-
457406
propertyIdentifier :: Assignment Term
458407
propertyIdentifier = makeTerm <$> symbol PropertyIdentifier <*> (Syntax.Identifier . name <$> source)
459408

@@ -754,7 +703,7 @@ importStatement = makeImportTerm <$> symbol Grammar.ImportStatement <*> childr
754703
makeImportTerm loc ([x], from) = makeImportTerm1 loc from x
755704
makeImportTerm loc (xs, from) = makeTerm loc $ fmap (makeImportTerm1 loc from) xs
756705
importSymbol = symbol Grammar.ImportSpecifier *> children (makeNameAliasPair <$> rawIdentifier <*> ((Just <$> rawIdentifier) <|> pure Nothing))
757-
rawIdentifier = (symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') *> (name <$> source)
706+
rawIdentifier = symbol Identifier *> (name <$> source)
758707
makeNameAliasPair from (Just alias) = (from, alias)
759708
makeNameAliasPair from Nothing = (from, from)
760709

@@ -813,7 +762,7 @@ exportStatement = makeTerm <$> symbol Grammar.ExportStatement <*> children (flip
813762
<|> symbol Grammar.ExportSpecifier *> children (makeNameAliasPair <$> rawIdentifier <*> pure Nothing)
814763
makeNameAliasPair from (Just alias) = TypeScript.Syntax.Alias from alias
815764
makeNameAliasPair from Nothing = TypeScript.Syntax.Alias from from
816-
rawIdentifier = (symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') *> (name <$> source)
765+
rawIdentifier = symbol Identifier *> (name <$> source)
817766
-- TODO: Need to validate that inline comments are still handled with this change in assigning to Path and not a Term.
818767
fromClause = symbol Grammar.String *> (TypeScript.Resolution.importPath <$> source)
819768

@@ -889,7 +838,7 @@ variableDeclarator =
889838
where
890839
makeVarDecl loc (subject, annotations, value) = makeTerm loc (Statement.Assignment [annotations] subject value)
891840

892-
requireCall = symbol CallExpression *> children ((symbol Identifier <|> symbol Identifier' <|> symbol Identifier'') *> do
841+
requireCall = symbol CallExpression *> children (symbol Identifier *> do
893842
s <- source
894843
guard (s == "require")
895844
symbol Arguments *> children (symbol Grammar.String *> (TypeScript.Resolution.importPath <$> source))

src/Language/TypeScript/Syntax.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,5 @@ module Language.TypeScript.Syntax ( module X ) where
22

33
import Language.TypeScript.Syntax.Import as X
44
import Language.TypeScript.Syntax.JavaScript as X
5-
import Language.TypeScript.Syntax.JSX as X
65
import Language.TypeScript.Syntax.TypeScript as X
76
import Language.TypeScript.Syntax.Types as X

0 commit comments

Comments
 (0)