mirror of
https://github.com/github/semantic.git
synced 2024-12-28 09:21:35 +03:00
Add escape sequences to ruby
This commit is contained in:
parent
6566b05d4c
commit
fbd464e400
@ -130,6 +130,17 @@ instance Show1 TextElement where liftShowsPrec = genericLiftShowsPrec
|
|||||||
instance Evaluatable TextElement where
|
instance Evaluatable TextElement where
|
||||||
eval (TextElement x) = rvalBox (string x)
|
eval (TextElement x) = rvalBox (string x)
|
||||||
|
|
||||||
|
-- | A sequence of textual contents within a string literal.
|
||||||
|
newtype EscapeSequence a = EscapeSequence { value :: Text }
|
||||||
|
deriving (Diffable, Eq, Foldable, Functor, Generic1, Hashable1, Ord, Show, Traversable, FreeVariables1, Declarations1, ToJSONFields1, Named1, Message1)
|
||||||
|
|
||||||
|
instance Eq1 EscapeSequence where liftEq = genericLiftEq
|
||||||
|
instance Ord1 EscapeSequence where liftCompare = genericLiftCompare
|
||||||
|
instance Show1 EscapeSequence where liftShowsPrec = genericLiftShowsPrec
|
||||||
|
|
||||||
|
-- TODO: Implement Eval instance for EscapeSequence
|
||||||
|
instance Evaluatable EscapeSequence
|
||||||
|
|
||||||
data Null a = Null
|
data Null a = Null
|
||||||
deriving (Eq, Ord, Show, Foldable, Traversable, Functor, Generic1, Hashable1, Diffable, FreeVariables1, Declarations1, ToJSONFields1, Named1, Message1)
|
deriving (Eq, Ord, Show, Foldable, Traversable, Functor, Generic1, Hashable1, Diffable, FreeVariables1, Declarations1, ToJSONFields1, Named1, Message1)
|
||||||
|
|
||||||
|
@ -127,6 +127,7 @@ type Syntax = '[
|
|||||||
, Ruby.Syntax.Require
|
, Ruby.Syntax.Require
|
||||||
, Ruby.Syntax.Send
|
, Ruby.Syntax.Send
|
||||||
, []
|
, []
|
||||||
|
, Literal.EscapeSequence
|
||||||
]
|
]
|
||||||
|
|
||||||
type Term = Term.Term (Sum Syntax) (Record Location)
|
type Term = Term.Term (Sum Syntax) (Record Location)
|
||||||
@ -270,7 +271,7 @@ literal =
|
|||||||
where
|
where
|
||||||
string :: Assignment Term
|
string :: Assignment Term
|
||||||
string = makeTerm' <$> (symbol String <|> symbol BareString) <*>
|
string = makeTerm' <$> (symbol String <|> symbol BareString) <*>
|
||||||
(children (inject . Literal.String <$> some interpolation) <|> inject . Literal.TextElement <$> source)
|
(children (inject . Literal.String <$> some (interpolation <|> escapeSequence)) <|> inject . Literal.TextElement <$> source)
|
||||||
|
|
||||||
symbol' :: Assignment Term
|
symbol' :: Assignment Term
|
||||||
symbol' = makeTerm' <$> (symbol Symbol <|> symbol Symbol' <|> symbol BareSymbol) <*>
|
symbol' = makeTerm' <$> (symbol Symbol <|> symbol Symbol' <|> symbol BareSymbol) <*>
|
||||||
@ -279,9 +280,12 @@ literal =
|
|||||||
interpolation :: Assignment Term
|
interpolation :: Assignment Term
|
||||||
interpolation = makeTerm <$> symbol Interpolation <*> children (Literal.InterpolationElement <$> expression)
|
interpolation = makeTerm <$> symbol Interpolation <*> children (Literal.InterpolationElement <$> expression)
|
||||||
|
|
||||||
|
escapeSequence :: Assignment Term
|
||||||
|
escapeSequence = makeTerm <$> symbol EscapeSequence <*> (Literal.EscapeSequence <$> source)
|
||||||
|
|
||||||
heredoc :: Assignment Term
|
heredoc :: Assignment Term
|
||||||
heredoc = makeTerm <$> symbol HeredocBeginning <*> (Literal.TextElement <$> source)
|
heredoc = makeTerm <$> symbol HeredocBeginning <*> (Literal.TextElement <$> source)
|
||||||
<|> makeTerm <$> symbol HeredocBody <*> children (some (interpolation <|> heredocEnd))
|
<|> makeTerm <$> symbol HeredocBody <*> children (some (interpolation <|> escapeSequence <|> heredocEnd))
|
||||||
where heredocEnd = makeTerm <$> symbol HeredocEnd <*> (Literal.TextElement <$> source)
|
where heredocEnd = makeTerm <$> symbol HeredocEnd <*> (Literal.TextElement <$> source)
|
||||||
|
|
||||||
beginBlock :: Assignment Term
|
beginBlock :: Assignment Term
|
||||||
|
Loading…
Reference in New Issue
Block a user