Merge remote-tracking branch 'upstream/main' into incomplete-hostname

This commit is contained in:
Arthur Baars
2022-03-16 12:31:12 +01:00
1166 changed files with 65711 additions and 51908 deletions

View File

@@ -124,7 +124,9 @@ abstract class InlineExpectationsTest extends string {
abstract predicate hasActualResult(Location location, string element, string tag, string value);
/**
* Like `hasActualResult`, but returns results that do not require a matching annotation.
* Holds if there is an optional result on the specified location.
*
* This is similar to `hasActualResult`, but returns results that do not require a matching annotation.
* A failure will still arise if there is an annotation that does not match any results, but not vice versa.
* Override this predicate to specify optional results.
*/

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@ calls/calls.rb:
# 58| getDesugared: [MethodCall] call to []
# 58| getReceiver: [ConstantReadAccess] Array
# 58| getArgument: [MethodCall] call to foo
# 58| getReceiver: [Self, SelfVariableAccess] self
# 58| getReceiver: [SelfVariableAccess] self
# 59| [ArrayLiteral] [...]
# 59| getDesugared: [MethodCall] call to []
# 59| getReceiver: [ConstantReadAccess] Array
@@ -15,7 +15,7 @@ calls/calls.rb:
# 66| getAnOperand/getRightOperand: [AddExpr] ... + ...
# 66| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] var1
# 66| getAnOperand/getArgument/getRightOperand: [MethodCall] call to bar
# 66| getReceiver: [Self, SelfVariableAccess] self
# 66| getReceiver: [SelfVariableAccess] self
# 67| [AssignAddExpr] ... += ...
# 67| getDesugared: [AssignExpr] ... = ...
# 67| getAnOperand/getLeftOperand: [LocalVariableAccess] var1
@@ -32,9 +32,9 @@ calls/calls.rb:
# 226| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
# 226| getAnOperand/getLeftOperand: [LocalVariableAccess] x
# 227| getStmt: [MethodCall] call to baz
# 227| getReceiver: [Self, SelfVariableAccess] self
# 227| getReceiver: [SelfVariableAccess] self
# 226| getReceiver: [MethodCall] call to bar
# 226| getReceiver: [Self, SelfVariableAccess] self
# 226| getReceiver: [SelfVariableAccess] self
# 229| [ForExpr] for ... in ...
# 229| getDesugared: [MethodCall] call to each
# 229| getBlock: [BraceBlock] { ... }
@@ -52,9 +52,9 @@ calls/calls.rb:
# 249| getReceiver: [ConstantReadAccess] Hash
# 249| getArgument: [Pair] Pair
# 249| getKey: [MethodCall] call to foo
# 249| getReceiver: [Self, SelfVariableAccess] self
# 249| getReceiver: [SelfVariableAccess] self
# 249| getValue: [MethodCall] call to bar
# 249| getReceiver: [Self, SelfVariableAccess] self
# 249| getReceiver: [SelfVariableAccess] self
# 249| getArgument: [Pair] Pair
# 249| getKey: [MethodCall] call to foo
# 249| getReceiver: [ConstantReadAccess] X
@@ -63,7 +63,7 @@ calls/calls.rb:
# 314| [AssignExpr] ... = ...
# 314| getDesugared: [StmtSequence] ...
# 314| getStmt: [SetterMethodCall] call to foo=
# 314| getReceiver: [Self, SelfVariableAccess] self
# 314| getReceiver: [SelfVariableAccess] self
# 314| getArgument: [AssignExpr] ... = ...
# 314| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
# 314| getAnOperand/getRightOperand: [IntegerLiteral] 10
@@ -72,7 +72,7 @@ calls/calls.rb:
# 315| getDesugared: [StmtSequence] ...
# 315| getStmt: [SetterMethodCall] call to []=
# 315| getReceiver: [MethodCall] call to foo
# 315| getReceiver: [Self, SelfVariableAccess] self
# 315| getReceiver: [SelfVariableAccess] self
# 315| getArgument: [AssignExpr] ... = ...
# 315| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
# 315| getAnOperand/getRightOperand: [IntegerLiteral] 10
@@ -84,7 +84,7 @@ calls/calls.rb:
# 316| getAnOperand/getLeftOperand: [MethodCall] call to foo
# 316| getDesugared: [StmtSequence] ...
# 316| getStmt: [SetterMethodCall] call to foo=
# 316| getReceiver: [Self, SelfVariableAccess] self
# 316| getReceiver: [SelfVariableAccess] self
# 316| getArgument: [AssignExpr] ... = ...
# 316| getAnOperand/getRightOperand: [MethodCall] call to []
# 316| getArgument: [IntegerLiteral] 0
@@ -95,7 +95,7 @@ calls/calls.rb:
# 316| getAnOperand/getLeftOperand: [MethodCall] call to bar
# 316| getDesugared: [StmtSequence] ...
# 316| getStmt: [SetterMethodCall] call to bar=
# 316| getReceiver: [Self, SelfVariableAccess] self
# 316| getReceiver: [SelfVariableAccess] self
# 316| getArgument: [AssignExpr] ... = ...
# 316| getAnOperand/getRightOperand: [MethodCall] call to []
# 316| getArgument: [RangeLiteral] _ .. _
@@ -109,7 +109,7 @@ calls/calls.rb:
# 316| getDesugared: [StmtSequence] ...
# 316| getStmt: [SetterMethodCall] call to []=
# 316| getReceiver: [MethodCall] call to foo
# 316| getReceiver: [Self, SelfVariableAccess] self
# 316| getReceiver: [SelfVariableAccess] self
# 316| getArgument: [AssignExpr] ... = ...
# 316| getAnOperand/getRightOperand: [MethodCall] call to []
# 316| getArgument: [IntegerLiteral] -1
@@ -139,7 +139,7 @@ calls/calls.rb:
# 317| getDesugared: [StmtSequence] ...
# 317| getStmt: [SetterMethodCall] call to []=
# 317| getReceiver: [MethodCall] call to foo
# 317| getReceiver: [Self, SelfVariableAccess] self
# 317| getReceiver: [SelfVariableAccess] self
# 317| getArgument: [AssignExpr] ... = ...
# 317| getAnOperand/getRightOperand: [MethodCall] call to []
# 317| getArgument: [RangeLiteral] _ .. _
@@ -161,7 +161,7 @@ calls/calls.rb:
# 318| [AssignAddExpr] ... += ...
# 318| getDesugared: [StmtSequence] ...
# 318| getStmt: [AssignExpr] ... = ...
# 318| getAnOperand/getRightOperand: [Self, SelfVariableAccess] self
# 318| getAnOperand/getRightOperand: [SelfVariableAccess] self
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
# 318| getStmt: [SetterMethodCall] call to count=
# 318| getReceiver: [LocalVariableAccess] __synth__0
@@ -177,7 +177,7 @@ calls/calls.rb:
# 319| getDesugared: [StmtSequence] ...
# 319| getStmt: [AssignExpr] ... = ...
# 319| getAnOperand/getRightOperand: [MethodCall] call to foo
# 319| getReceiver: [Self, SelfVariableAccess] self
# 319| getReceiver: [SelfVariableAccess] self
# 319| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
# 319| getStmt: [SetterMethodCall] call to []=
# 319| getReceiver: [LocalVariableAccess] __synth__0
@@ -199,7 +199,7 @@ calls/calls.rb:
# 320| getStmt: [AssignExpr] ... = ...
# 320| getAnOperand/getRightOperand: [MethodCall] call to bar
# 320| getReceiver: [MethodCall] call to foo
# 320| getReceiver: [Self, SelfVariableAccess] self
# 320| getReceiver: [SelfVariableAccess] self
# 320| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
# 320| getStmt: [SetterMethodCall] call to []=
# 320| getReceiver: [LocalVariableAccess] __synth__0
@@ -213,13 +213,13 @@ calls/calls.rb:
# 320| getStmt: [AssignExpr] ... = ...
# 320| getAnOperand/getRightOperand: [MethodCall] call to baz
# 320| getReceiver: [MethodCall] call to foo
# 320| getReceiver: [Self, SelfVariableAccess] self
# 320| getReceiver: [SelfVariableAccess] self
# 320| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2
# 320| getStmt: [AssignExpr] ... = ...
# 320| getAnOperand/getRightOperand: [AddExpr] ... + ...
# 320| getAnOperand/getLeftOperand/getReceiver: [MethodCall] call to boo
# 320| getReceiver: [MethodCall] call to foo
# 320| getReceiver: [Self, SelfVariableAccess] self
# 320| getReceiver: [SelfVariableAccess] self
# 320| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 320| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__3
# 320| getStmt: [AssignExpr] ... = ...
@@ -260,7 +260,7 @@ calls/calls.rb:
# 340| getReceiver: [LocalVariableAccess] __synth__0__1
# 340| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
# 341| getStmt: [MethodCall] call to foo
# 341| getReceiver: [Self, SelfVariableAccess] self
# 341| getReceiver: [SelfVariableAccess] self
# 341| getArgument: [LocalVariableAccess] x
# 341| getArgument: [LocalVariableAccess] y
# 341| getArgument: [LocalVariableAccess] z
@@ -304,197 +304,206 @@ constants/constants.rb:
# 20| getComponent: [StringTextComponent] Chuck
# 20| getArgument: [StringLiteral] "Dave"
# 20| getComponent: [StringTextComponent] Dave
escape_sequences/escapes.rb:
# 58| [ArrayLiteral] %w(...)
# 58| getDesugared: [MethodCall] call to []
# 58| getReceiver: [ConstantReadAccess] Array
# 58| getArgument: [StringLiteral] "foo \n"
# 58| getComponent: [StringTextComponent] foo
# 58| getComponent: [StringEscapeSequenceComponent] \n
# 58| getArgument: [StringLiteral] "bar"
# 58| getComponent: [StringTextComponent] bar
literals/literals.rb:
# 88| [HashLiteral] {...}
# 88| getDesugared: [MethodCall] call to []
# 88| getReceiver: [ConstantReadAccess] Hash
# 88| getArgument: [Pair] Pair
# 88| getKey: [SymbolLiteral] :foo
# 88| getValue: [StringLiteral] "bar"
# 88| getComponent: [StringTextComponent] bar
# 96| [ArrayLiteral] [...]
# 96| getDesugared: [MethodCall] call to []
# 96| getReceiver: [ConstantReadAccess] Array
# 97| [ArrayLiteral] [...]
# 97| getDesugared: [MethodCall] call to []
# 97| getReceiver: [ConstantReadAccess] Array
# 97| getArgument: [IntegerLiteral] 1
# 97| getArgument: [IntegerLiteral] 2
# 97| getArgument: [IntegerLiteral] 3
# 98| [ArrayLiteral] [...]
# 98| getDesugared: [MethodCall] call to []
# 98| getReceiver: [ConstantReadAccess] Array
# 98| getArgument: [IntegerLiteral] 4
# 98| getArgument: [IntegerLiteral] 5
# 98| getArgument: [DivExpr] ... / ...
# 98| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 12
# 98| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 2
# 99| [ArrayLiteral] [...]
# 99| getDesugared: [MethodCall] call to []
# 99| getReceiver: [ConstantReadAccess] Array
# 99| getArgument: [IntegerLiteral] 7
# 99| getArgument: [ArrayLiteral] [...]
# 99| getDesugared: [MethodCall] call to []
# 99| getReceiver: [ConstantReadAccess] Array
# 99| getArgument: [IntegerLiteral] 8
# 99| getArgument: [IntegerLiteral] 9
# 102| [ArrayLiteral] %w(...)
# 102| getDesugared: [MethodCall] call to []
# 102| getReceiver: [ConstantReadAccess] Array
# 103| [ArrayLiteral] %w(...)
# 103| getDesugared: [MethodCall] call to []
# 103| getReceiver: [ConstantReadAccess] Array
# 103| getArgument: [StringLiteral] "foo"
# 103| getComponent: [StringTextComponent] foo
# 103| getArgument: [StringLiteral] "bar"
# 103| getComponent: [StringTextComponent] bar
# 103| getArgument: [StringLiteral] "baz"
# 103| getComponent: [StringTextComponent] baz
# 104| [ArrayLiteral] %w(...)
# 104| getDesugared: [MethodCall] call to []
# 104| getReceiver: [ConstantReadAccess] Array
# 104| getArgument: [StringLiteral] "foo"
# 104| getComponent: [StringTextComponent] foo
# 104| getArgument: [StringLiteral] "bar"
# 104| getComponent: [StringTextComponent] bar
# 104| getArgument: [StringLiteral] "baz"
# 104| getComponent: [StringTextComponent] baz
# 105| [ArrayLiteral] %w(...)
# 105| getDesugared: [MethodCall] call to []
# 105| getReceiver: [ConstantReadAccess] Array
# 105| getArgument: [StringLiteral] "foo"
# 105| getComponent: [StringTextComponent] foo
# 105| getArgument: [StringLiteral] "bar#{...}"
# 105| getComponent: [StringTextComponent] bar
# 105| getComponent: [StringInterpolationComponent] #{...}
# 105| getStmt: [AddExpr] ... + ...
# 105| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 1
# 105| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 105| getArgument: [StringLiteral] "#{...}"
# 105| getComponent: [StringInterpolationComponent] #{...}
# 105| getStmt: [LocalVariableAccess] bar
# 105| getArgument: [StringLiteral] "#{...}"
# 105| getComponent: [StringInterpolationComponent] #{...}
# 105| getStmt: [ConstantReadAccess] BAR
# 105| getArgument: [StringLiteral] "baz"
# 105| getComponent: [StringTextComponent] baz
# 106| [ArrayLiteral] %w(...)
# 106| getDesugared: [MethodCall] call to []
# 106| getReceiver: [ConstantReadAccess] Array
# 106| getArgument: [StringLiteral] "foo"
# 106| getComponent: [StringTextComponent] foo
# 106| getArgument: [StringLiteral] "bar#{1+1}"
# 106| getComponent: [StringTextComponent] bar#{1+1}
# 106| getArgument: [StringLiteral] "#{bar}"
# 106| getComponent: [StringTextComponent] #{bar}
# 106| getArgument: [StringLiteral] "#{BAR}"
# 106| getComponent: [StringTextComponent] #{BAR}
# 106| getArgument: [StringLiteral] "baz"
# 106| getComponent: [StringTextComponent] baz
# 109| [ArrayLiteral] %i(...)
# 101| [HashLiteral] {...}
# 101| getDesugared: [MethodCall] call to []
# 101| getReceiver: [ConstantReadAccess] Hash
# 101| getArgument: [Pair] Pair
# 101| getKey: [SymbolLiteral] :foo
# 101| getValue: [StringLiteral] "bar"
# 101| getComponent: [StringTextComponent] bar
# 109| [ArrayLiteral] [...]
# 109| getDesugared: [MethodCall] call to []
# 109| getReceiver: [ConstantReadAccess] Array
# 110| [ArrayLiteral] %i(...)
# 110| [ArrayLiteral] [...]
# 110| getDesugared: [MethodCall] call to []
# 110| getReceiver: [ConstantReadAccess] Array
# 110| getArgument: [SymbolLiteral] :"foo"
# 110| getComponent: [StringTextComponent] foo
# 110| getArgument: [SymbolLiteral] :"bar"
# 110| getComponent: [StringTextComponent] bar
# 110| getArgument: [SymbolLiteral] :"baz"
# 110| getComponent: [StringTextComponent] baz
# 111| [ArrayLiteral] %i(...)
# 110| getArgument: [IntegerLiteral] 1
# 110| getArgument: [IntegerLiteral] 2
# 110| getArgument: [IntegerLiteral] 3
# 111| [ArrayLiteral] [...]
# 111| getDesugared: [MethodCall] call to []
# 111| getReceiver: [ConstantReadAccess] Array
# 111| getArgument: [SymbolLiteral] :"foo"
# 111| getComponent: [StringTextComponent] foo
# 111| getArgument: [SymbolLiteral] :"bar"
# 111| getComponent: [StringTextComponent] bar
# 111| getArgument: [SymbolLiteral] :"baz"
# 111| getComponent: [StringTextComponent] baz
# 112| [ArrayLiteral] %i(...)
# 111| getArgument: [IntegerLiteral] 4
# 111| getArgument: [IntegerLiteral] 5
# 111| getArgument: [DivExpr] ... / ...
# 111| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 12
# 111| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 2
# 112| [ArrayLiteral] [...]
# 112| getDesugared: [MethodCall] call to []
# 112| getReceiver: [ConstantReadAccess] Array
# 112| getArgument: [SymbolLiteral] :"foo"
# 112| getComponent: [StringTextComponent] foo
# 112| getArgument: [SymbolLiteral] :"bar#{...}"
# 112| getComponent: [StringTextComponent] bar
# 112| getComponent: [StringInterpolationComponent] #{...}
# 112| getStmt: [AddExpr] ... + ...
# 112| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 2
# 112| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 4
# 112| getArgument: [SymbolLiteral] :"#{...}"
# 112| getComponent: [StringInterpolationComponent] #{...}
# 112| getStmt: [LocalVariableAccess] bar
# 112| getArgument: [SymbolLiteral] :"#{...}"
# 112| getComponent: [StringInterpolationComponent] #{...}
# 112| getStmt: [ConstantReadAccess] BAR
# 112| getArgument: [SymbolLiteral] :"baz"
# 112| getComponent: [StringTextComponent] baz
# 113| [ArrayLiteral] %i(...)
# 113| getDesugared: [MethodCall] call to []
# 113| getReceiver: [ConstantReadAccess] Array
# 113| getArgument: [SymbolLiteral] :"foo"
# 113| getComponent: [StringTextComponent] foo
# 113| getArgument: [SymbolLiteral] :"bar#{"
# 113| getComponent: [StringTextComponent] bar#{
# 113| getArgument: [SymbolLiteral] :"2"
# 113| getComponent: [StringTextComponent] 2
# 113| getArgument: [SymbolLiteral] :"+"
# 113| getComponent: [StringTextComponent] +
# 113| getArgument: [SymbolLiteral] :"4"
# 113| getComponent: [StringTextComponent] 4
# 113| getArgument: [SymbolLiteral] :"}"
# 113| getComponent: [StringTextComponent] }
# 113| getArgument: [SymbolLiteral] :"#{bar}"
# 113| getComponent: [StringTextComponent] #{bar}
# 113| getArgument: [SymbolLiteral] :"#{BAR}"
# 113| getComponent: [StringTextComponent] #{BAR}
# 113| getArgument: [SymbolLiteral] :"baz"
# 113| getComponent: [StringTextComponent] baz
# 116| [HashLiteral] {...}
# 112| getArgument: [IntegerLiteral] 7
# 112| getArgument: [ArrayLiteral] [...]
# 112| getDesugared: [MethodCall] call to []
# 112| getReceiver: [ConstantReadAccess] Array
# 112| getArgument: [IntegerLiteral] 8
# 112| getArgument: [IntegerLiteral] 9
# 115| [ArrayLiteral] %w(...)
# 115| getDesugared: [MethodCall] call to []
# 115| getReceiver: [ConstantReadAccess] Array
# 116| [ArrayLiteral] %w(...)
# 116| getDesugared: [MethodCall] call to []
# 116| getReceiver: [ConstantReadAccess] Hash
# 117| [HashLiteral] {...}
# 116| getReceiver: [ConstantReadAccess] Array
# 116| getArgument: [StringLiteral] "foo"
# 116| getComponent: [StringTextComponent] foo
# 116| getArgument: [StringLiteral] "bar"
# 116| getComponent: [StringTextComponent] bar
# 116| getArgument: [StringLiteral] "baz"
# 116| getComponent: [StringTextComponent] baz
# 117| [ArrayLiteral] %w(...)
# 117| getDesugared: [MethodCall] call to []
# 117| getReceiver: [ConstantReadAccess] Hash
# 117| getArgument: [Pair] Pair
# 117| getKey: [SymbolLiteral] :foo
# 117| getValue: [IntegerLiteral] 1
# 117| getArgument: [Pair] Pair
# 117| getKey: [SymbolLiteral] :bar
# 117| getValue: [IntegerLiteral] 2
# 117| getArgument: [Pair] Pair
# 117| getKey: [StringLiteral] "baz"
# 117| getComponent: [StringTextComponent] baz
# 117| getValue: [IntegerLiteral] 3
# 118| [HashLiteral] {...}
# 117| getReceiver: [ConstantReadAccess] Array
# 117| getArgument: [StringLiteral] "foo"
# 117| getComponent: [StringTextComponent] foo
# 117| getArgument: [StringLiteral] "bar"
# 117| getComponent: [StringTextComponent] bar
# 117| getArgument: [StringLiteral] "baz"
# 117| getComponent: [StringTextComponent] baz
# 118| [ArrayLiteral] %w(...)
# 118| getDesugared: [MethodCall] call to []
# 118| getReceiver: [ConstantReadAccess] Hash
# 118| getArgument: [Pair] Pair
# 118| getKey: [SymbolLiteral] :foo
# 118| getValue: [IntegerLiteral] 7
# 118| getArgument: [HashSplatExpr] ** ...
# 118| getAnOperand/getOperand/getReceiver: [MethodCall] call to baz
# 118| getReceiver: [Self, SelfVariableAccess] self
# 185| [HashLiteral] {...}
# 185| getDesugared: [MethodCall] call to []
# 185| getReceiver: [ConstantReadAccess] Hash
# 185| getArgument: [Pair] Pair
# 185| getKey: [SymbolLiteral] :x
# 185| getValue: [LocalVariableAccess] x
# 185| getArgument: [Pair] Pair
# 185| getKey: [SymbolLiteral] :y
# 185| getValue: [IntegerLiteral] 5
# 186| [HashLiteral] {...}
# 186| getDesugared: [MethodCall] call to []
# 186| getReceiver: [ConstantReadAccess] Hash
# 186| getArgument: [Pair] Pair
# 186| getKey: [SymbolLiteral] :y
# 186| getValue: [MethodCall] call to y
# 186| getArgument: [Pair] Pair
# 186| getKey: [SymbolLiteral] :Z
# 186| getValue: [ConstantReadAccess] Z
# 118| getReceiver: [ConstantReadAccess] Array
# 118| getArgument: [StringLiteral] "foo"
# 118| getComponent: [StringTextComponent] foo
# 118| getArgument: [StringLiteral] "bar#{...}"
# 118| getComponent: [StringTextComponent] bar
# 118| getComponent: [StringInterpolationComponent] #{...}
# 118| getStmt: [AddExpr] ... + ...
# 118| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 1
# 118| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 118| getArgument: [StringLiteral] "#{...}"
# 118| getComponent: [StringInterpolationComponent] #{...}
# 118| getStmt: [LocalVariableAccess] bar
# 118| getArgument: [StringLiteral] "#{...}"
# 118| getComponent: [StringInterpolationComponent] #{...}
# 118| getStmt: [ConstantReadAccess] BAR
# 118| getArgument: [StringLiteral] "baz"
# 118| getComponent: [StringTextComponent] baz
# 119| [ArrayLiteral] %w(...)
# 119| getDesugared: [MethodCall] call to []
# 119| getReceiver: [ConstantReadAccess] Array
# 119| getArgument: [StringLiteral] "foo"
# 119| getComponent: [StringTextComponent] foo
# 119| getArgument: [StringLiteral] "bar#{1+1}"
# 119| getComponent: [StringTextComponent] bar#{1+1}
# 119| getArgument: [StringLiteral] "#{bar}"
# 119| getComponent: [StringTextComponent] #{bar}
# 119| getArgument: [StringLiteral] "#{BAR}"
# 119| getComponent: [StringTextComponent] #{BAR}
# 119| getArgument: [StringLiteral] "baz"
# 119| getComponent: [StringTextComponent] baz
# 122| [ArrayLiteral] %i(...)
# 122| getDesugared: [MethodCall] call to []
# 122| getReceiver: [ConstantReadAccess] Array
# 123| [ArrayLiteral] %i(...)
# 123| getDesugared: [MethodCall] call to []
# 123| getReceiver: [ConstantReadAccess] Array
# 123| getArgument: [SymbolLiteral] :"foo"
# 123| getComponent: [StringTextComponent] foo
# 123| getArgument: [SymbolLiteral] :"bar"
# 123| getComponent: [StringTextComponent] bar
# 123| getArgument: [SymbolLiteral] :"baz"
# 123| getComponent: [StringTextComponent] baz
# 124| [ArrayLiteral] %i(...)
# 124| getDesugared: [MethodCall] call to []
# 124| getReceiver: [ConstantReadAccess] Array
# 124| getArgument: [SymbolLiteral] :"foo"
# 124| getComponent: [StringTextComponent] foo
# 124| getArgument: [SymbolLiteral] :"bar"
# 124| getComponent: [StringTextComponent] bar
# 124| getArgument: [SymbolLiteral] :"baz"
# 124| getComponent: [StringTextComponent] baz
# 125| [ArrayLiteral] %i(...)
# 125| getDesugared: [MethodCall] call to []
# 125| getReceiver: [ConstantReadAccess] Array
# 125| getArgument: [SymbolLiteral] :"foo"
# 125| getComponent: [StringTextComponent] foo
# 125| getArgument: [SymbolLiteral] :"bar#{...}"
# 125| getComponent: [StringTextComponent] bar
# 125| getComponent: [StringInterpolationComponent] #{...}
# 125| getStmt: [AddExpr] ... + ...
# 125| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 2
# 125| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 4
# 125| getArgument: [SymbolLiteral] :"#{...}"
# 125| getComponent: [StringInterpolationComponent] #{...}
# 125| getStmt: [LocalVariableAccess] bar
# 125| getArgument: [SymbolLiteral] :"#{...}"
# 125| getComponent: [StringInterpolationComponent] #{...}
# 125| getStmt: [ConstantReadAccess] BAR
# 125| getArgument: [SymbolLiteral] :"baz"
# 125| getComponent: [StringTextComponent] baz
# 126| [ArrayLiteral] %i(...)
# 126| getDesugared: [MethodCall] call to []
# 126| getReceiver: [ConstantReadAccess] Array
# 126| getArgument: [SymbolLiteral] :"foo"
# 126| getComponent: [StringTextComponent] foo
# 126| getArgument: [SymbolLiteral] :"bar#{"
# 126| getComponent: [StringTextComponent] bar#{
# 126| getArgument: [SymbolLiteral] :"2"
# 126| getComponent: [StringTextComponent] 2
# 126| getArgument: [SymbolLiteral] :"+"
# 126| getComponent: [StringTextComponent] +
# 126| getArgument: [SymbolLiteral] :"4"
# 126| getComponent: [StringTextComponent] 4
# 126| getArgument: [SymbolLiteral] :"}"
# 126| getComponent: [StringTextComponent] }
# 126| getArgument: [SymbolLiteral] :"#{bar}"
# 126| getComponent: [StringTextComponent] #{bar}
# 126| getArgument: [SymbolLiteral] :"#{BAR}"
# 126| getComponent: [StringTextComponent] #{BAR}
# 126| getArgument: [SymbolLiteral] :"baz"
# 126| getComponent: [StringTextComponent] baz
# 129| [HashLiteral] {...}
# 129| getDesugared: [MethodCall] call to []
# 129| getReceiver: [ConstantReadAccess] Hash
# 130| [HashLiteral] {...}
# 130| getDesugared: [MethodCall] call to []
# 130| getReceiver: [ConstantReadAccess] Hash
# 130| getArgument: [Pair] Pair
# 130| getKey: [SymbolLiteral] :foo
# 130| getValue: [IntegerLiteral] 1
# 130| getArgument: [Pair] Pair
# 130| getKey: [SymbolLiteral] :bar
# 130| getValue: [IntegerLiteral] 2
# 130| getArgument: [Pair] Pair
# 130| getKey: [StringLiteral] "baz"
# 130| getComponent: [StringTextComponent] baz
# 130| getValue: [IntegerLiteral] 3
# 131| [HashLiteral] {...}
# 131| getDesugared: [MethodCall] call to []
# 131| getReceiver: [ConstantReadAccess] Hash
# 131| getArgument: [Pair] Pair
# 131| getKey: [SymbolLiteral] :foo
# 131| getValue: [IntegerLiteral] 7
# 131| getArgument: [HashSplatExpr] ** ...
# 131| getAnOperand/getOperand/getReceiver: [MethodCall] call to baz
# 131| getReceiver: [SelfVariableAccess] self
# 198| [HashLiteral] {...}
# 198| getDesugared: [MethodCall] call to []
# 198| getReceiver: [ConstantReadAccess] Hash
# 198| getArgument: [Pair] Pair
# 198| getKey: [SymbolLiteral] :x
# 198| getValue: [LocalVariableAccess] x
# 198| getArgument: [Pair] Pair
# 198| getKey: [SymbolLiteral] :y
# 198| getValue: [IntegerLiteral] 5
# 199| [HashLiteral] {...}
# 199| getDesugared: [MethodCall] call to []
# 199| getReceiver: [ConstantReadAccess] Hash
# 199| getArgument: [Pair] Pair
# 199| getKey: [SymbolLiteral] :y
# 199| getValue: [MethodCall] call to y
# 199| getArgument: [Pair] Pair
# 199| getKey: [SymbolLiteral] :Z
# 199| getValue: [ConstantReadAccess] Z
control/loops.rb:
# 9| [ForExpr] for ... in ...
# 9| getDesugared: [MethodCall] call to each

View File

@@ -345,6 +345,81 @@
| erb/template.html.erb:27:16:27:20 | "foo" | foo |
| erb/template.html.erb:27:23:27:27 | "bar" | bar |
| erb/template.html.erb:27:30:27:34 | "baz" | baz |
| escape_sequences/escapes.rb:6:1:6:4 | "\\'" | ' |
| escape_sequences/escapes.rb:7:1:7:4 | "\\"" | \\" |
| escape_sequences/escapes.rb:8:1:8:4 | "\\\\" | \\ |
| escape_sequences/escapes.rb:9:1:9:4 | "\\1" | \\1 |
| escape_sequences/escapes.rb:10:1:10:5 | "\\\\1" | \\1 |
| escape_sequences/escapes.rb:11:1:11:6 | "\\141" | \\141 |
| escape_sequences/escapes.rb:12:1:12:4 | "\\n" | \\n |
| escape_sequences/escapes.rb:15:1:15:4 | "\\'" | ' |
| escape_sequences/escapes.rb:16:1:16:4 | "\\"" | " |
| escape_sequences/escapes.rb:17:1:17:4 | "\\\\" | \\ |
| escape_sequences/escapes.rb:18:1:18:4 | "\\1" | \u0001 |
| escape_sequences/escapes.rb:19:1:19:5 | "\\\\1" | \\1 |
| escape_sequences/escapes.rb:20:1:20:6 | "\\141" | a |
| escape_sequences/escapes.rb:21:1:21:6 | "\\x6d" | m |
| escape_sequences/escapes.rb:22:1:22:6 | "\\x6E" | n |
| escape_sequences/escapes.rb:23:1:23:6 | "\\X6d" | X6d |
| escape_sequences/escapes.rb:24:1:24:6 | "\\X6E" | X6E |
| escape_sequences/escapes.rb:25:1:25:8 | "\\u203d" | \u203d |
| escape_sequences/escapes.rb:26:1:26:8 | "\\u{62}" | b |
| escape_sequences/escapes.rb:27:1:27:11 | "\\u{1f60a}" | \ud83d\ude0a |
| escape_sequences/escapes.rb:28:1:28:4 | "\\a" | \u0007 |
| escape_sequences/escapes.rb:29:1:29:4 | "\\b" | \u0008 |
| escape_sequences/escapes.rb:30:1:30:4 | "\\t" | \t |
| escape_sequences/escapes.rb:31:1:31:4 | "\\n" | \n |
| escape_sequences/escapes.rb:32:1:32:4 | "\\v" | \u000b |
| escape_sequences/escapes.rb:33:1:33:4 | "\\f" | \u000c |
| escape_sequences/escapes.rb:34:1:34:4 | "\\r" | \r |
| escape_sequences/escapes.rb:35:1:35:4 | "\\e" | \u001b |
| escape_sequences/escapes.rb:36:1:36:4 | "\\s" | |
| escape_sequences/escapes.rb:37:1:37:5 | "\\c?" | c? |
| escape_sequences/escapes.rb:38:1:38:6 | "\\C-?" | C-? |
| escape_sequences/escapes.rb:43:5:43:9 | "\\\\." | \\. |
| escape_sequences/escapes.rb:44:1:44:6 | "#{...}" | \\. |
| escape_sequences/escapes.rb:44:4:44:4 | a | \\. |
| escape_sequences/escapes.rb:48:1:48:4 | /\\n/ | \\n |
| escape_sequences/escapes.rb:49:1:49:4 | /\\p/ | \\p |
| escape_sequences/escapes.rb:50:1:50:8 | /\\u0061/ | \\u0061 |
| escape_sequences/escapes.rb:53:5:53:9 | "\\\\." | \\. |
| escape_sequences/escapes.rb:54:5:54:8 | /\\./ | \\. |
| escape_sequences/escapes.rb:55:1:55:10 | /#{...}#{...}/ | \\.\\. |
| escape_sequences/escapes.rb:55:4:55:4 | a | \\. |
| escape_sequences/escapes.rb:55:8:55:8 | b | \\. |
| escape_sequences/escapes.rb:58:4:58:9 | "foo \\n" | foo\\n |
| escape_sequences/escapes.rb:58:11:58:13 | "bar" | bar |
| escape_sequences/escapes.rb:61:1:61:5 | :"\\'" | :' |
| escape_sequences/escapes.rb:62:1:62:5 | :"\\"" | :\\" |
| escape_sequences/escapes.rb:63:1:63:5 | :"\\\\" | :\\ |
| escape_sequences/escapes.rb:64:1:64:5 | :"\\1" | :\\1 |
| escape_sequences/escapes.rb:65:1:65:6 | :"\\\\1" | :\\1 |
| escape_sequences/escapes.rb:66:1:66:7 | :"\\141" | :\\141 |
| escape_sequences/escapes.rb:67:1:67:5 | :"\\n" | :\\n |
| escape_sequences/escapes.rb:70:1:70:5 | :"\\'" | :' |
| escape_sequences/escapes.rb:71:1:71:5 | :"\\"" | :" |
| escape_sequences/escapes.rb:72:1:72:5 | :"\\\\" | :\\ |
| escape_sequences/escapes.rb:73:1:73:5 | :"\\1" | :\u0001 |
| escape_sequences/escapes.rb:74:1:74:6 | :"\\\\1" | :\\1 |
| escape_sequences/escapes.rb:75:1:75:7 | :"\\141" | :a |
| escape_sequences/escapes.rb:76:1:76:7 | :"\\x6d" | :m |
| escape_sequences/escapes.rb:77:1:77:7 | :"\\x6E" | :n |
| escape_sequences/escapes.rb:78:1:78:7 | :"\\X6d" | :X6d |
| escape_sequences/escapes.rb:79:1:79:7 | :"\\X6E" | :X6E |
| escape_sequences/escapes.rb:80:1:80:9 | :"\\u203d" | :\u203d |
| escape_sequences/escapes.rb:81:1:81:9 | :"\\u{62}" | :b |
| escape_sequences/escapes.rb:82:1:82:12 | :"\\u{1f60a}" | :\ud83d\ude0a |
| escape_sequences/escapes.rb:83:1:83:5 | :"\\a" | :\u0007 |
| escape_sequences/escapes.rb:84:1:84:5 | :"\\b" | :\u0008 |
| escape_sequences/escapes.rb:85:1:85:5 | :"\\t" | :\t |
| escape_sequences/escapes.rb:86:1:86:5 | :"\\n" | :\n |
| escape_sequences/escapes.rb:87:1:87:5 | :"\\v" | :\u000b |
| escape_sequences/escapes.rb:88:1:88:5 | :"\\f" | :\u000c |
| escape_sequences/escapes.rb:89:1:89:5 | :"\\r" | :\r |
| escape_sequences/escapes.rb:90:1:90:5 | :"\\e" | :\u001b |
| escape_sequences/escapes.rb:91:1:91:5 | :"\\s" | : |
| escape_sequences/escapes.rb:92:1:92:6 | :"\\c?" | :c? |
| escape_sequences/escapes.rb:93:1:93:7 | :"\\C-?" | :C-? |
| gems/Gemfile:1:8:1:29 | "https://rubygems.org" | https://rubygems.org |
| gems/Gemfile:3:5:3:13 | "foo_gem" | foo_gem |
| gems/Gemfile:3:16:3:23 | "~> 2.0" | ~> 2.0 |
@@ -378,218 +453,225 @@
| literals/literals.rb:11:1:11:5 | 5_678 | 5678 |
| literals/literals.rb:12:1:12:1 | 0 | 0 |
| literals/literals.rb:13:1:13:5 | 0d900 | 0 |
| literals/literals.rb:16:1:16:6 | 0x1234 | 4660 |
| literals/literals.rb:17:1:17:10 | 0xdeadbeef | -559038737 |
| literals/literals.rb:18:1:18:11 | 0xF00D_face | -267519282 |
| literals/literals.rb:21:1:21:4 | 0123 | 83 |
| literals/literals.rb:22:1:22:5 | 0o234 | 156 |
| literals/literals.rb:23:1:23:6 | 0O45_6 | 302 |
| literals/literals.rb:26:1:26:10 | 0b10010100 | 148 |
| literals/literals.rb:27:1:27:11 | 0B011_01101 | 109 |
| literals/literals.rb:30:1:30:5 | 12.34 | 12.34 |
| literals/literals.rb:31:1:31:7 | 1234e-2 | 12.34 |
| literals/literals.rb:32:1:32:7 | 1.234E1 | 12.34 |
| literals/literals.rb:35:1:35:3 | 23r | 23/1 |
| literals/literals.rb:36:1:36:5 | 9.85r | 985/100 |
| literals/literals.rb:39:1:39:2 | 2i | 0+2i |
| literals/literals.rb:46:1:46:2 | "" | |
| literals/literals.rb:47:1:47:2 | "" | |
| literals/literals.rb:48:1:48:7 | "hello" | hello |
| literals/literals.rb:49:1:49:9 | "goodbye" | goodbye |
| literals/literals.rb:50:1:50:30 | "string with escaped \\" quote" | string with escaped \\" quote |
| literals/literals.rb:51:1:51:21 | "string with " quote" | string with " quote |
| literals/literals.rb:52:1:52:14 | "foo bar baz" | foo bar baz |
| literals/literals.rb:53:1:53:15 | "foo bar baz" | foo bar baz |
| literals/literals.rb:54:1:54:20 | "foo ' bar " baz'" | foo ' bar " baz' |
| literals/literals.rb:55:1:55:20 | "FOO ' BAR " BAZ'" | FOO ' BAR " BAZ' |
| literals/literals.rb:56:1:56:12 | "foo\\ bar" | foo\\ bar |
| literals/literals.rb:57:1:57:12 | "foo\\ bar" | foo\\ bar |
| literals/literals.rb:58:1:58:20 | "2 + 2 = #{...}" | 2 + 2 = 4 |
| literals/literals.rb:58:13:58:13 | 2 | 2 |
| literals/literals.rb:58:13:58:17 | ... + ... | 4 |
| literals/literals.rb:58:17:58:17 | 2 | 2 |
| literals/literals.rb:59:1:59:22 | "3 + 4 = #{...}" | 3 + 4 = 7 |
| literals/literals.rb:59:15:59:15 | 3 | 3 |
| literals/literals.rb:59:15:59:19 | ... + ... | 7 |
| literals/literals.rb:59:19:59:19 | 4 | 4 |
| literals/literals.rb:60:1:60:20 | "2 + 2 = #{ 2 + 2 }" | 2 + 2 = #{ 2 + 2 } |
| literals/literals.rb:61:1:61:22 | "3 + 4 = #{ 3 + 4 }" | 3 + 4 = #{ 3 + 4 } |
| literals/literals.rb:62:1:62:5 | "foo" | foo |
| literals/literals.rb:62:7:62:11 | "bar" | bar |
| literals/literals.rb:62:13:62:17 | "baz" | baz |
| literals/literals.rb:63:1:63:7 | "foo" | foo |
| literals/literals.rb:63:9:63:13 | "bar" | bar |
| literals/literals.rb:63:15:63:19 | "baz" | baz |
| literals/literals.rb:64:1:64:5 | "foo" | foo |
| literals/literals.rb:64:7:64:21 | "bar#{...}" | bar1 |
| literals/literals.rb:64:14:64:14 | 1 | 1 |
| literals/literals.rb:64:14:64:18 | ... * ... | 1 |
| literals/literals.rb:64:18:64:18 | 1 | 1 |
| literals/literals.rb:64:23:64:27 | "baz" | baz |
| literals/literals.rb:65:1:65:35 | "foo #{...} qux" | foo bar 5 baz qux |
| literals/literals.rb:65:9:65:28 | "bar #{...} baz" | bar 5 baz |
| literals/literals.rb:65:17:65:17 | 2 | 2 |
| literals/literals.rb:65:17:65:21 | ... + ... | 5 |
| literals/literals.rb:65:21:65:21 | 3 | 3 |
| literals/literals.rb:66:1:66:22 | "foo #{...}" | foo 10 |
| literals/literals.rb:66:17:66:17 | 1 | 1 |
| literals/literals.rb:66:17:66:19 | ... + ... | 10 |
| literals/literals.rb:66:19:66:19 | 9 | 9 |
| literals/literals.rb:67:7:67:11 | "bar" | bar |
| literals/literals.rb:68:7:68:11 | "bar" | bar |
| literals/literals.rb:69:1:69:14 | "foo #{...}" | foo bar |
| literals/literals.rb:69:9:69:11 | bar | bar |
| literals/literals.rb:70:1:70:14 | "foo #{...}" | foo bar |
| literals/literals.rb:70:9:70:11 | BAR | bar |
| literals/literals.rb:73:1:73:2 | ?x | ?x |
| literals/literals.rb:74:1:74:3 | ?\\n | ?\\n |
| literals/literals.rb:75:1:75:3 | ?\\s | ?\\s |
| literals/literals.rb:76:1:76:3 | ?\\\\ | ?\\\\ |
| literals/literals.rb:77:1:77:7 | ?\\u{58} | ?\\u{58} |
| literals/literals.rb:78:1:78:5 | ?\\C-a | ?\\C-a |
| literals/literals.rb:79:1:79:5 | ?\\M-a | ?\\M-a |
| literals/literals.rb:80:1:80:8 | ?\\M-\\C-a | ?\\M-\\C-a |
| literals/literals.rb:81:1:81:8 | ?\\C-\\M-a | ?\\C-\\M-a |
| literals/literals.rb:84:1:84:3 | :"" | : |
| literals/literals.rb:85:1:85:6 | :hello | :hello |
| literals/literals.rb:86:1:86:10 | :"foo bar" | :foo bar |
| literals/literals.rb:87:1:87:10 | :"bar baz" | :bar baz |
| literals/literals.rb:88:3:88:5 | :foo | :foo |
| literals/literals.rb:88:8:88:12 | "bar" | bar |
| literals/literals.rb:89:1:89:10 | :"wibble" | :wibble |
| literals/literals.rb:90:1:90:17 | :"wibble wobble" | :wibble wobble |
| literals/literals.rb:91:1:91:30 | :"foo_#{...}_#{...}_#{...}" | :foo_4_bar_bar |
| literals/literals.rb:91:10:91:10 | 2 | 2 |
| literals/literals.rb:91:10:91:14 | ... + ... | 4 |
| literals/literals.rb:91:14:91:14 | 2 | 2 |
| literals/literals.rb:91:19:91:21 | bar | bar |
| literals/literals.rb:91:26:91:28 | BAR | bar |
| literals/literals.rb:92:1:92:30 | :"foo_#{ 2 + 2}_#{bar}_#{BAR}" | :foo_#{ 2 + 2}_#{bar}_#{BAR} |
| literals/literals.rb:93:1:93:18 | :"foo_#{ 3 - 2 }" | :foo_#{ 3 - 2 } |
| literals/literals.rb:97:2:97:2 | 1 | 1 |
| literals/literals.rb:97:5:97:5 | 2 | 2 |
| literals/literals.rb:97:8:97:8 | 3 | 3 |
| literals/literals.rb:98:2:98:2 | 4 | 4 |
| literals/literals.rb:98:5:98:5 | 5 | 5 |
| literals/literals.rb:98:8:98:9 | 12 | 12 |
| literals/literals.rb:98:8:98:13 | ... / ... | 6 |
| literals/literals.rb:98:13:98:13 | 2 | 2 |
| literals/literals.rb:99:2:99:2 | 7 | 7 |
| literals/literals.rb:99:6:99:6 | 8 | 8 |
| literals/literals.rb:99:9:99:9 | 9 | 9 |
| literals/literals.rb:103:4:103:6 | "foo" | foo |
| literals/literals.rb:103:8:103:10 | "bar" | bar |
| literals/literals.rb:103:12:103:14 | "baz" | baz |
| literals/literals.rb:104:4:104:6 | "foo" | foo |
| literals/literals.rb:104:8:104:10 | "bar" | bar |
| literals/literals.rb:104:12:104:14 | "baz" | baz |
| literals/literals.rb:105:4:105:6 | "foo" | foo |
| literals/literals.rb:105:8:105:16 | "bar#{...}" | bar2 |
| literals/literals.rb:105:13:105:13 | 1 | 1 |
| literals/literals.rb:105:13:105:15 | ... + ... | 2 |
| literals/literals.rb:105:15:105:15 | 1 | 1 |
| literals/literals.rb:105:18:105:23 | "#{...}" | bar |
| literals/literals.rb:105:20:105:22 | bar | bar |
| literals/literals.rb:105:25:105:30 | "#{...}" | bar |
| literals/literals.rb:105:27:105:29 | BAR | bar |
| literals/literals.rb:105:32:105:34 | "baz" | baz |
| literals/literals.rb:106:4:106:6 | "foo" | foo |
| literals/literals.rb:106:8:106:16 | "bar#{1+1}" | bar#{1+1} |
| literals/literals.rb:106:18:106:23 | "#{bar}" | #{bar} |
| literals/literals.rb:106:25:106:30 | "#{BAR}" | #{BAR} |
| literals/literals.rb:106:32:106:34 | "baz" | baz |
| literals/literals.rb:110:4:110:6 | :"foo" | :foo |
| literals/literals.rb:110:8:110:10 | :"bar" | :bar |
| literals/literals.rb:110:12:110:14 | :"baz" | :baz |
| literals/literals.rb:111:4:111:6 | :"foo" | :foo |
| literals/literals.rb:111:8:111:10 | :"bar" | :bar |
| literals/literals.rb:111:12:111:14 | :"baz" | :baz |
| literals/literals.rb:112:4:112:6 | :"foo" | :foo |
| literals/literals.rb:112:8:112:20 | :"bar#{...}" | :bar6 |
| literals/literals.rb:112:14:112:14 | 2 | 2 |
| literals/literals.rb:112:14:112:18 | ... + ... | 6 |
| literals/literals.rb:112:18:112:18 | 4 | 4 |
| literals/literals.rb:112:22:112:27 | :"#{...}" | :bar |
| literals/literals.rb:112:24:112:26 | bar | bar |
| literals/literals.rb:112:29:112:34 | :"#{...}" | :bar |
| literals/literals.rb:112:31:112:33 | BAR | bar |
| literals/literals.rb:112:36:112:38 | :"baz" | :baz |
| literals/literals.rb:113:4:113:6 | :"foo" | :foo |
| literals/literals.rb:113:8:113:12 | :"bar#{" | :bar#{ |
| literals/literals.rb:113:14:113:14 | :"2" | :2 |
| literals/literals.rb:113:16:113:16 | :"+" | :+ |
| literals/literals.rb:113:18:113:18 | :"4" | :4 |
| literals/literals.rb:113:20:113:20 | :"}" | :} |
| literals/literals.rb:113:22:113:27 | :"#{bar}" | :#{bar} |
| literals/literals.rb:113:29:113:34 | :"#{BAR}" | :#{BAR} |
| literals/literals.rb:113:36:113:38 | :"baz" | :baz |
| literals/literals.rb:117:3:117:5 | :foo | :foo |
| literals/literals.rb:117:8:117:8 | 1 | 1 |
| literals/literals.rb:117:11:117:14 | :bar | :bar |
| literals/literals.rb:117:19:117:19 | 2 | 2 |
| literals/literals.rb:117:22:117:26 | "baz" | baz |
| literals/literals.rb:117:31:117:31 | 3 | 3 |
| literals/literals.rb:118:3:118:5 | :foo | :foo |
| literals/literals.rb:118:8:118:8 | 7 | 7 |
| literals/literals.rb:121:2:121:2 | 1 | 1 |
| literals/literals.rb:121:5:121:6 | 10 | 10 |
| literals/literals.rb:122:2:122:2 | 1 | 1 |
| literals/literals.rb:122:6:122:7 | 10 | 10 |
| literals/literals.rb:123:2:123:2 | 1 | 1 |
| literals/literals.rb:123:7:123:7 | 0 | 0 |
| literals/literals.rb:124:9:124:9 | 2 | 2 |
| literals/literals.rb:124:9:124:11 | ... + ... | 5 |
| literals/literals.rb:124:11:124:11 | 3 | 3 |
| literals/literals.rb:125:2:125:2 | 1 | 1 |
| literals/literals.rb:126:4:126:4 | 1 | 1 |
| literals/literals.rb:127:2:127:2 | 0 | 0 |
| literals/literals.rb:127:6:127:6 | 1 | 1 |
| literals/literals.rb:130:1:130:7 | `ls -l` | ls -l |
| literals/literals.rb:131:1:131:9 | `ls -l` | ls -l |
| literals/literals.rb:132:1:132:32 | `du -d #{...} #{...} #{...}` | du -d 2 bar bar |
| literals/literals.rb:132:11:132:11 | 1 | 1 |
| literals/literals.rb:132:11:132:15 | ... + ... | 2 |
| literals/literals.rb:132:15:132:15 | 1 | 1 |
| literals/literals.rb:132:21:132:23 | bar | bar |
| literals/literals.rb:132:28:132:30 | BAR | bar |
| literals/literals.rb:133:1:133:20 | `du -d #{...}` | du -d 1 |
| literals/literals.rb:133:13:133:13 | 5 | 5 |
| literals/literals.rb:133:13:133:17 | ... - ... | 1 |
| literals/literals.rb:133:17:133:17 | 4 | 4 |
| literals/literals.rb:136:1:136:2 | // | |
| literals/literals.rb:137:1:137:5 | /foo/ | foo |
| literals/literals.rb:138:1:138:6 | /foo/ | foo |
| literals/literals.rb:139:1:139:13 | /foo+\\sbar\\S/ | foo+\\sbar\\S |
| literals/literals.rb:140:1:140:30 | /foo#{...}bar#{...}#{...}/ | foo2barbarbar |
| literals/literals.rb:140:8:140:8 | 1 | 1 |
| literals/literals.rb:140:8:140:12 | ... + ... | 2 |
| literals/literals.rb:140:12:140:12 | 1 | 1 |
| literals/literals.rb:140:20:140:22 | bar | bar |
| literals/literals.rb:140:26:140:28 | BAR | bar |
| literals/literals.rb:142:1:142:4 | // | |
| literals/literals.rb:143:1:143:7 | /foo/ | foo |
| literals/literals.rb:144:1:144:8 | /foo/ | foo |
| literals/literals.rb:145:1:145:15 | /foo+\\sbar\\S/ | foo+\\sbar\\S |
| literals/literals.rb:146:1:146:32 | /foo#{...}bar#{...}#{...}/ | foo2barbarbar |
| literals/literals.rb:146:10:146:10 | 1 | 1 |
| literals/literals.rb:146:10:146:14 | ... + ... | 2 |
| literals/literals.rb:146:14:146:14 | 1 | 1 |
| literals/literals.rb:146:22:146:24 | bar | bar |
| literals/literals.rb:146:28:146:30 | BAR | bar |
| literals/literals.rb:150:1:150:34 | "abcdefghijklmnopqrstuvwxyzabcdef" | abcdefghijklmnopqrstuvwxyzabcdef |
| literals/literals.rb:151:1:151:35 | "foobarfoobarfoobarfoobarfooba..." | foobarfoobarfoobarfoobarfoobarfoo |
| literals/literals.rb:152:1:152:40 | "foobar\\\\foobar\\\\foobar\\\\fooba..." | foobar\\\\foobar\\\\foobar\\\\foobar\\\\foobar |
| literals/literals.rb:155:9:155:13 | <<SQL | \nselect * from table\n |
| literals/literals.rb:162:11:162:16 | <<-BLA | \nsome text\\nand some more\n |
| literals/literals.rb:167:9:167:19 | <<~SQUIGGLY | \n indented stuff\n |
| literals/literals.rb:180:10:180:19 | <<`SCRIPT` | \n cat file.txt\n |
| literals/literals.rb:184:5:184:6 | 42 | 42 |
| literals/literals.rb:185:2:185:2 | :x | :x |
| literals/literals.rb:185:2:185:2 | x | 42 |
| literals/literals.rb:185:6:185:6 | :y | :y |
| literals/literals.rb:185:8:185:8 | 5 | 5 |
| literals/literals.rb:186:2:186:2 | :y | :y |
| literals/literals.rb:186:7:186:7 | :Z | :Z |
| literals/literals.rb:14:1:14:10 | 2147483647 | 2147483647 |
| literals/literals.rb:18:1:18:6 | 0x1234 | 4660 |
| literals/literals.rb:19:1:19:6 | 0xbeef | 48879 |
| literals/literals.rb:20:1:20:7 | 0xF0_0D | 61453 |
| literals/literals.rb:21:1:21:22 | 0x000000000000000000ff | 255 |
| literals/literals.rb:22:1:22:11 | 0x7FFF_FFFF | 2147483647 |
| literals/literals.rb:28:1:28:4 | 0123 | 83 |
| literals/literals.rb:29:1:29:5 | 0o234 | 156 |
| literals/literals.rb:30:1:30:6 | 0O45_6 | 302 |
| literals/literals.rb:31:1:31:31 | 0000000000000000000000000000010 | 8 |
| literals/literals.rb:32:1:32:12 | 017777777777 | 2147483647 |
| literals/literals.rb:36:1:36:10 | 0b10010100 | 148 |
| literals/literals.rb:37:1:37:11 | 0B011_01101 | 109 |
| literals/literals.rb:38:1:38:43 | 0b00000000000000000000000000000000000000011 | 3 |
| literals/literals.rb:39:1:39:34 | 0b01111111111111111111111111111111 | 2147483647 |
| literals/literals.rb:43:1:43:5 | 12.34 | 12.34 |
| literals/literals.rb:44:1:44:7 | 1234e-2 | 12.34 |
| literals/literals.rb:45:1:45:7 | 1.234E1 | 12.34 |
| literals/literals.rb:48:1:48:3 | 23r | 23/1 |
| literals/literals.rb:49:1:49:5 | 9.85r | 985/100 |
| literals/literals.rb:52:1:52:2 | 2i | 0+2i |
| literals/literals.rb:59:1:59:2 | "" | |
| literals/literals.rb:60:1:60:2 | "" | |
| literals/literals.rb:61:1:61:7 | "hello" | hello |
| literals/literals.rb:62:1:62:9 | "goodbye" | goodbye |
| literals/literals.rb:63:1:63:30 | "string with escaped \\" quote" | string with escaped " quote |
| literals/literals.rb:64:1:64:21 | "string with " quote" | string with " quote |
| literals/literals.rb:65:1:65:14 | "foo bar baz" | foo bar baz |
| literals/literals.rb:66:1:66:15 | "foo bar baz" | foo bar baz |
| literals/literals.rb:67:1:67:20 | "foo ' bar " baz'" | foo ' bar " baz' |
| literals/literals.rb:68:1:68:20 | "FOO ' BAR " BAZ'" | FOO ' BAR " BAZ' |
| literals/literals.rb:69:1:69:12 | "foo\\ bar" | foo\\ bar |
| literals/literals.rb:70:1:70:12 | "foo\\ bar" | foo bar |
| literals/literals.rb:71:1:71:20 | "2 + 2 = #{...}" | 2 + 2 = 4 |
| literals/literals.rb:71:13:71:13 | 2 | 2 |
| literals/literals.rb:71:13:71:17 | ... + ... | 4 |
| literals/literals.rb:71:17:71:17 | 2 | 2 |
| literals/literals.rb:72:1:72:22 | "3 + 4 = #{...}" | 3 + 4 = 7 |
| literals/literals.rb:72:15:72:15 | 3 | 3 |
| literals/literals.rb:72:15:72:19 | ... + ... | 7 |
| literals/literals.rb:72:19:72:19 | 4 | 4 |
| literals/literals.rb:73:1:73:20 | "2 + 2 = #{ 2 + 2 }" | 2 + 2 = #{ 2 + 2 } |
| literals/literals.rb:74:1:74:22 | "3 + 4 = #{ 3 + 4 }" | 3 + 4 = #{ 3 + 4 } |
| literals/literals.rb:75:1:75:5 | "foo" | foo |
| literals/literals.rb:75:7:75:11 | "bar" | bar |
| literals/literals.rb:75:13:75:17 | "baz" | baz |
| literals/literals.rb:76:1:76:7 | "foo" | foo |
| literals/literals.rb:76:9:76:13 | "bar" | bar |
| literals/literals.rb:76:15:76:19 | "baz" | baz |
| literals/literals.rb:77:1:77:5 | "foo" | foo |
| literals/literals.rb:77:7:77:21 | "bar#{...}" | bar1 |
| literals/literals.rb:77:14:77:14 | 1 | 1 |
| literals/literals.rb:77:14:77:18 | ... * ... | 1 |
| literals/literals.rb:77:18:77:18 | 1 | 1 |
| literals/literals.rb:77:23:77:27 | "baz" | baz |
| literals/literals.rb:78:1:78:35 | "foo #{...} qux" | foo bar 5 baz qux |
| literals/literals.rb:78:9:78:28 | "bar #{...} baz" | bar 5 baz |
| literals/literals.rb:78:17:78:17 | 2 | 2 |
| literals/literals.rb:78:17:78:21 | ... + ... | 5 |
| literals/literals.rb:78:21:78:21 | 3 | 3 |
| literals/literals.rb:79:1:79:22 | "foo #{...}" | foo 10 |
| literals/literals.rb:79:17:79:17 | 1 | 1 |
| literals/literals.rb:79:17:79:19 | ... + ... | 10 |
| literals/literals.rb:79:19:79:19 | 9 | 9 |
| literals/literals.rb:80:7:80:11 | "bar" | bar |
| literals/literals.rb:81:7:81:11 | "bar" | bar |
| literals/literals.rb:82:1:82:14 | "foo #{...}" | foo bar |
| literals/literals.rb:82:9:82:11 | bar | bar |
| literals/literals.rb:83:1:83:14 | "foo #{...}" | foo bar |
| literals/literals.rb:83:9:83:11 | BAR | bar |
| literals/literals.rb:86:1:86:2 | ?x | ?x |
| literals/literals.rb:87:1:87:3 | ?\\n | ?\\n |
| literals/literals.rb:88:1:88:3 | ?\\s | ?\\s |
| literals/literals.rb:89:1:89:3 | ?\\\\ | ?\\\\ |
| literals/literals.rb:90:1:90:7 | ?\\u{58} | ?\\u{58} |
| literals/literals.rb:91:1:91:5 | ?\\C-a | ?\\C-a |
| literals/literals.rb:92:1:92:5 | ?\\M-a | ?\\M-a |
| literals/literals.rb:93:1:93:8 | ?\\M-\\C-a | ?\\M-\\C-a |
| literals/literals.rb:94:1:94:8 | ?\\C-\\M-a | ?\\C-\\M-a |
| literals/literals.rb:97:1:97:3 | :"" | : |
| literals/literals.rb:98:1:98:6 | :hello | :hello |
| literals/literals.rb:99:1:99:10 | :"foo bar" | :foo bar |
| literals/literals.rb:100:1:100:10 | :"bar baz" | :bar baz |
| literals/literals.rb:101:3:101:5 | :foo | :foo |
| literals/literals.rb:101:8:101:12 | "bar" | bar |
| literals/literals.rb:102:1:102:10 | :"wibble" | :wibble |
| literals/literals.rb:103:1:103:17 | :"wibble wobble" | :wibble wobble |
| literals/literals.rb:104:1:104:30 | :"foo_#{...}_#{...}_#{...}" | :foo_4_bar_bar |
| literals/literals.rb:104:10:104:10 | 2 | 2 |
| literals/literals.rb:104:10:104:14 | ... + ... | 4 |
| literals/literals.rb:104:14:104:14 | 2 | 2 |
| literals/literals.rb:104:19:104:21 | bar | bar |
| literals/literals.rb:104:26:104:28 | BAR | bar |
| literals/literals.rb:105:1:105:30 | :"foo_#{ 2 + 2}_#{bar}_#{BAR}" | :foo_#{ 2 + 2}_#{bar}_#{BAR} |
| literals/literals.rb:106:1:106:18 | :"foo_#{ 3 - 2 }" | :foo_#{ 3 - 2 } |
| literals/literals.rb:110:2:110:2 | 1 | 1 |
| literals/literals.rb:110:5:110:5 | 2 | 2 |
| literals/literals.rb:110:8:110:8 | 3 | 3 |
| literals/literals.rb:111:2:111:2 | 4 | 4 |
| literals/literals.rb:111:5:111:5 | 5 | 5 |
| literals/literals.rb:111:8:111:9 | 12 | 12 |
| literals/literals.rb:111:8:111:13 | ... / ... | 6 |
| literals/literals.rb:111:13:111:13 | 2 | 2 |
| literals/literals.rb:112:2:112:2 | 7 | 7 |
| literals/literals.rb:112:6:112:6 | 8 | 8 |
| literals/literals.rb:112:9:112:9 | 9 | 9 |
| literals/literals.rb:116:4:116:6 | "foo" | foo |
| literals/literals.rb:116:8:116:10 | "bar" | bar |
| literals/literals.rb:116:12:116:14 | "baz" | baz |
| literals/literals.rb:117:4:117:6 | "foo" | foo |
| literals/literals.rb:117:8:117:10 | "bar" | bar |
| literals/literals.rb:117:12:117:14 | "baz" | baz |
| literals/literals.rb:118:4:118:6 | "foo" | foo |
| literals/literals.rb:118:8:118:16 | "bar#{...}" | bar2 |
| literals/literals.rb:118:13:118:13 | 1 | 1 |
| literals/literals.rb:118:13:118:15 | ... + ... | 2 |
| literals/literals.rb:118:15:118:15 | 1 | 1 |
| literals/literals.rb:118:18:118:23 | "#{...}" | bar |
| literals/literals.rb:118:20:118:22 | bar | bar |
| literals/literals.rb:118:25:118:30 | "#{...}" | bar |
| literals/literals.rb:118:27:118:29 | BAR | bar |
| literals/literals.rb:118:32:118:34 | "baz" | baz |
| literals/literals.rb:119:4:119:6 | "foo" | foo |
| literals/literals.rb:119:8:119:16 | "bar#{1+1}" | bar#{1+1} |
| literals/literals.rb:119:18:119:23 | "#{bar}" | #{bar} |
| literals/literals.rb:119:25:119:30 | "#{BAR}" | #{BAR} |
| literals/literals.rb:119:32:119:34 | "baz" | baz |
| literals/literals.rb:123:4:123:6 | :"foo" | :foo |
| literals/literals.rb:123:8:123:10 | :"bar" | :bar |
| literals/literals.rb:123:12:123:14 | :"baz" | :baz |
| literals/literals.rb:124:4:124:6 | :"foo" | :foo |
| literals/literals.rb:124:8:124:10 | :"bar" | :bar |
| literals/literals.rb:124:12:124:14 | :"baz" | :baz |
| literals/literals.rb:125:4:125:6 | :"foo" | :foo |
| literals/literals.rb:125:8:125:20 | :"bar#{...}" | :bar6 |
| literals/literals.rb:125:14:125:14 | 2 | 2 |
| literals/literals.rb:125:14:125:18 | ... + ... | 6 |
| literals/literals.rb:125:18:125:18 | 4 | 4 |
| literals/literals.rb:125:22:125:27 | :"#{...}" | :bar |
| literals/literals.rb:125:24:125:26 | bar | bar |
| literals/literals.rb:125:29:125:34 | :"#{...}" | :bar |
| literals/literals.rb:125:31:125:33 | BAR | bar |
| literals/literals.rb:125:36:125:38 | :"baz" | :baz |
| literals/literals.rb:126:4:126:6 | :"foo" | :foo |
| literals/literals.rb:126:8:126:12 | :"bar#{" | :bar#{ |
| literals/literals.rb:126:14:126:14 | :"2" | :2 |
| literals/literals.rb:126:16:126:16 | :"+" | :+ |
| literals/literals.rb:126:18:126:18 | :"4" | :4 |
| literals/literals.rb:126:20:126:20 | :"}" | :} |
| literals/literals.rb:126:22:126:27 | :"#{bar}" | :#{bar} |
| literals/literals.rb:126:29:126:34 | :"#{BAR}" | :#{BAR} |
| literals/literals.rb:126:36:126:38 | :"baz" | :baz |
| literals/literals.rb:130:3:130:5 | :foo | :foo |
| literals/literals.rb:130:8:130:8 | 1 | 1 |
| literals/literals.rb:130:11:130:14 | :bar | :bar |
| literals/literals.rb:130:19:130:19 | 2 | 2 |
| literals/literals.rb:130:22:130:26 | "baz" | baz |
| literals/literals.rb:130:31:130:31 | 3 | 3 |
| literals/literals.rb:131:3:131:5 | :foo | :foo |
| literals/literals.rb:131:8:131:8 | 7 | 7 |
| literals/literals.rb:134:2:134:2 | 1 | 1 |
| literals/literals.rb:134:5:134:6 | 10 | 10 |
| literals/literals.rb:135:2:135:2 | 1 | 1 |
| literals/literals.rb:135:6:135:7 | 10 | 10 |
| literals/literals.rb:136:2:136:2 | 1 | 1 |
| literals/literals.rb:136:7:136:7 | 0 | 0 |
| literals/literals.rb:137:9:137:9 | 2 | 2 |
| literals/literals.rb:137:9:137:11 | ... + ... | 5 |
| literals/literals.rb:137:11:137:11 | 3 | 3 |
| literals/literals.rb:138:2:138:2 | 1 | 1 |
| literals/literals.rb:139:4:139:4 | 1 | 1 |
| literals/literals.rb:140:2:140:2 | 0 | 0 |
| literals/literals.rb:140:6:140:6 | 1 | 1 |
| literals/literals.rb:143:1:143:7 | `ls -l` | ls -l |
| literals/literals.rb:144:1:144:9 | `ls -l` | ls -l |
| literals/literals.rb:145:1:145:32 | `du -d #{...} #{...} #{...}` | du -d 2 bar bar |
| literals/literals.rb:145:11:145:11 | 1 | 1 |
| literals/literals.rb:145:11:145:15 | ... + ... | 2 |
| literals/literals.rb:145:15:145:15 | 1 | 1 |
| literals/literals.rb:145:21:145:23 | bar | bar |
| literals/literals.rb:145:28:145:30 | BAR | bar |
| literals/literals.rb:146:1:146:20 | `du -d #{...}` | du -d 1 |
| literals/literals.rb:146:13:146:13 | 5 | 5 |
| literals/literals.rb:146:13:146:17 | ... - ... | 1 |
| literals/literals.rb:146:17:146:17 | 4 | 4 |
| literals/literals.rb:149:1:149:2 | // | |
| literals/literals.rb:150:1:150:5 | /foo/ | foo |
| literals/literals.rb:151:1:151:6 | /foo/ | foo |
| literals/literals.rb:152:1:152:13 | /foo+\\sbar\\S/ | foo+\\sbar\\S |
| literals/literals.rb:153:1:153:30 | /foo#{...}bar#{...}#{...}/ | foo2barbarbar |
| literals/literals.rb:153:8:153:8 | 1 | 1 |
| literals/literals.rb:153:8:153:12 | ... + ... | 2 |
| literals/literals.rb:153:12:153:12 | 1 | 1 |
| literals/literals.rb:153:20:153:22 | bar | bar |
| literals/literals.rb:153:26:153:28 | BAR | bar |
| literals/literals.rb:155:1:155:4 | // | |
| literals/literals.rb:156:1:156:7 | /foo/ | foo |
| literals/literals.rb:157:1:157:8 | /foo/ | foo |
| literals/literals.rb:158:1:158:15 | /foo+\\sbar\\S/ | foo+\\sbar\\S |
| literals/literals.rb:159:1:159:32 | /foo#{...}bar#{...}#{...}/ | foo2barbarbar |
| literals/literals.rb:159:10:159:10 | 1 | 1 |
| literals/literals.rb:159:10:159:14 | ... + ... | 2 |
| literals/literals.rb:159:14:159:14 | 1 | 1 |
| literals/literals.rb:159:22:159:24 | bar | bar |
| literals/literals.rb:159:28:159:30 | BAR | bar |
| literals/literals.rb:163:1:163:34 | "abcdefghijklmnopqrstuvwxyzabcdef" | abcdefghijklmnopqrstuvwxyzabcdef |
| literals/literals.rb:164:1:164:35 | "foobarfoobarfoobarfoobarfooba..." | foobarfoobarfoobarfoobarfoobarfoo |
| literals/literals.rb:165:1:165:40 | "foobar\\\\foobar\\\\foobar\\\\fooba..." | foobar\\foobar\\foobar\\foobar\\foobar |
| literals/literals.rb:168:9:168:13 | <<SQL | \nselect * from table\n |
| literals/literals.rb:175:11:175:16 | <<-BLA | \nsome text\nand some more\n |
| literals/literals.rb:180:9:180:19 | <<~SQUIGGLY | \n indented stuff\n |
| literals/literals.rb:193:10:193:19 | <<`SCRIPT` | \n cat file.txt\n |
| literals/literals.rb:197:5:197:6 | 42 | 42 |
| literals/literals.rb:198:2:198:2 | :x | :x |
| literals/literals.rb:198:2:198:2 | x | 42 |
| literals/literals.rb:198:6:198:6 | :y | :y |
| literals/literals.rb:198:8:198:8 | 5 | 5 |
| literals/literals.rb:199:2:199:2 | :y | :y |
| literals/literals.rb:199:7:199:7 | :Z | :Z |
| misc/misc.erb:2:15:2:37 | "main_include_admin.js" | main_include_admin.js |
| misc/misc.rb:1:7:1:11 | "bar" | bar |
| misc/misc.rb:3:7:3:9 | foo | foo |
@@ -610,7 +692,7 @@
| misc/misc.rb:8:12:8:14 | []= | []= |
| misc/misc.rb:9:7:9:11 | super | super |
| misc/misc.rb:9:13:9:16 | self | self |
| misc/misc.rb:10:7:10:17 | :"\\n#{...}" | :\\nbar |
| misc/misc.rb:10:7:10:17 | :"\\n#{...}" | :\nbar |
| misc/misc.rb:10:13:10:15 | bar | bar |
| misc/misc.rb:10:19:10:24 | :"foo" | :foo |
| modules/classes.rb:11:28:11:31 | :baz | :baz |

View File

@@ -0,0 +1,130 @@
stringEscapeSequenceComponents
| escapes.rb:15:2:15:3 | \\' | \\' | ' |
| escapes.rb:16:2:16:3 | \\" | \\" | " |
| escapes.rb:17:2:17:3 | \\\\ | \\\\ | \\ |
| escapes.rb:18:2:18:3 | \\1 | \\1 | \u0001 |
| escapes.rb:19:2:19:3 | \\\\ | \\\\ | \\ |
| escapes.rb:20:2:20:5 | \\141 | \\141 | a |
| escapes.rb:21:2:21:5 | \\x6d | \\x6d | m |
| escapes.rb:22:2:22:5 | \\x6E | \\x6E | n |
| escapes.rb:23:2:23:3 | \\X | \\X | X |
| escapes.rb:24:2:24:3 | \\X | \\X | X |
| escapes.rb:25:2:25:7 | \\u203d | \\u203d | \u203d |
| escapes.rb:26:2:26:7 | \\u{62} | \\u{62} | b |
| escapes.rb:27:2:27:10 | \\u{1f60a} | \\u{1f60a} | \ud83d\ude0a |
| escapes.rb:28:2:28:3 | \\a | \\a | \u0007 |
| escapes.rb:29:2:29:3 | \\b | \\b | \u0008 |
| escapes.rb:30:2:30:3 | \\t | \\t | \t |
| escapes.rb:31:2:31:3 | \\n | \\n | \n |
| escapes.rb:32:2:32:3 | \\v | \\v | \u000b |
| escapes.rb:33:2:33:3 | \\f | \\f | \u000c |
| escapes.rb:34:2:34:3 | \\r | \\r | \r |
| escapes.rb:35:2:35:3 | \\e | \\e | \u001b |
| escapes.rb:36:2:36:3 | \\s | \\s | |
| escapes.rb:37:2:37:3 | \\c | \\c | c |
| escapes.rb:38:2:38:3 | \\C | \\C | C |
| escapes.rb:43:6:43:7 | \\\\ | \\\\ | \\ |
| escapes.rb:53:6:53:7 | \\\\ | \\\\ | \\ |
| escapes.rb:58:7:58:9 | \\n | \\n | \\n |
| escapes.rb:70:3:70:4 | \\' | \\' | ' |
| escapes.rb:71:3:71:4 | \\" | \\" | " |
| escapes.rb:72:3:72:4 | \\\\ | \\\\ | \\ |
| escapes.rb:73:3:73:4 | \\1 | \\1 | \u0001 |
| escapes.rb:74:3:74:4 | \\\\ | \\\\ | \\ |
| escapes.rb:75:3:75:6 | \\141 | \\141 | a |
| escapes.rb:76:3:76:6 | \\x6d | \\x6d | m |
| escapes.rb:77:3:77:6 | \\x6E | \\x6E | n |
| escapes.rb:78:3:78:4 | \\X | \\X | X |
| escapes.rb:79:3:79:4 | \\X | \\X | X |
| escapes.rb:80:3:80:8 | \\u203d | \\u203d | \u203d |
| escapes.rb:81:3:81:8 | \\u{62} | \\u{62} | b |
| escapes.rb:82:3:82:11 | \\u{1f60a} | \\u{1f60a} | \ud83d\ude0a |
| escapes.rb:83:3:83:4 | \\a | \\a | \u0007 |
| escapes.rb:84:3:84:4 | \\b | \\b | \u0008 |
| escapes.rb:85:3:85:4 | \\t | \\t | \t |
| escapes.rb:86:3:86:4 | \\n | \\n | \n |
| escapes.rb:87:3:87:4 | \\v | \\v | \u000b |
| escapes.rb:88:3:88:4 | \\f | \\f | \u000c |
| escapes.rb:89:3:89:4 | \\r | \\r | \r |
| escapes.rb:90:3:90:4 | \\e | \\e | \u001b |
| escapes.rb:91:3:91:4 | \\s | \\s | |
| escapes.rb:92:3:92:4 | \\c | \\c | c |
| escapes.rb:93:3:93:4 | \\C | \\C | C |
regexpEscapeSequenceComponents
| escapes.rb:48:2:48:3 | \\n | \\n |
| escapes.rb:49:2:49:3 | \\p | \\p |
| escapes.rb:50:2:50:7 | \\u0061 | \\u0061 |
| escapes.rb:54:6:54:7 | \\. | \\. |
stringlikeLiterals
| escapes.rb:6:1:6:4 | "\\'" | ' | string |
| escapes.rb:7:1:7:4 | "\\"" | \\" | string |
| escapes.rb:8:1:8:4 | "\\\\" | \\ | string |
| escapes.rb:9:1:9:4 | "\\1" | \\1 | string |
| escapes.rb:10:1:10:5 | "\\\\1" | \\1 | string |
| escapes.rb:11:1:11:6 | "\\141" | \\141 | string |
| escapes.rb:12:1:12:4 | "\\n" | \\n | string |
| escapes.rb:15:1:15:4 | "\\'" | ' | string |
| escapes.rb:16:1:16:4 | "\\"" | " | string |
| escapes.rb:17:1:17:4 | "\\\\" | \\ | string |
| escapes.rb:18:1:18:4 | "\\1" | \u0001 | string |
| escapes.rb:19:1:19:5 | "\\\\1" | \\1 | string |
| escapes.rb:20:1:20:6 | "\\141" | a | string |
| escapes.rb:21:1:21:6 | "\\x6d" | m | string |
| escapes.rb:22:1:22:6 | "\\x6E" | n | string |
| escapes.rb:23:1:23:6 | "\\X6d" | X6d | string |
| escapes.rb:24:1:24:6 | "\\X6E" | X6E | string |
| escapes.rb:25:1:25:8 | "\\u203d" | \u203d | string |
| escapes.rb:26:1:26:8 | "\\u{62}" | b | string |
| escapes.rb:27:1:27:11 | "\\u{1f60a}" | \ud83d\ude0a | string |
| escapes.rb:28:1:28:4 | "\\a" | \u0007 | string |
| escapes.rb:29:1:29:4 | "\\b" | \u0008 | string |
| escapes.rb:30:1:30:4 | "\\t" | \t | string |
| escapes.rb:31:1:31:4 | "\\n" | \n | string |
| escapes.rb:32:1:32:4 | "\\v" | \u000b | string |
| escapes.rb:33:1:33:4 | "\\f" | \u000c | string |
| escapes.rb:34:1:34:4 | "\\r" | \r | string |
| escapes.rb:35:1:35:4 | "\\e" | \u001b | string |
| escapes.rb:36:1:36:4 | "\\s" | | string |
| escapes.rb:37:1:37:5 | "\\c?" | c? | string |
| escapes.rb:38:1:38:6 | "\\C-?" | C-? | string |
| escapes.rb:43:5:43:9 | "\\\\." | \\. | string |
| escapes.rb:44:1:44:6 | "#{...}" | \\. | string |
| escapes.rb:48:1:48:4 | /\\n/ | \\n | string |
| escapes.rb:49:1:49:4 | /\\p/ | \\p | string |
| escapes.rb:50:1:50:8 | /\\u0061/ | \\u0061 | string |
| escapes.rb:53:5:53:9 | "\\\\." | \\. | string |
| escapes.rb:54:5:54:8 | /\\./ | \\. | string |
| escapes.rb:55:1:55:10 | /#{...}#{...}/ | \\.\\. | string |
| escapes.rb:58:4:58:9 | "foo \\n" | foo\\n | string |
| escapes.rb:58:11:58:13 | "bar" | bar | string |
| escapes.rb:61:1:61:5 | :"\\'" | ' | symbol |
| escapes.rb:62:1:62:5 | :"\\"" | \\" | symbol |
| escapes.rb:63:1:63:5 | :"\\\\" | \\ | symbol |
| escapes.rb:64:1:64:5 | :"\\1" | \\1 | symbol |
| escapes.rb:65:1:65:6 | :"\\\\1" | \\1 | symbol |
| escapes.rb:66:1:66:7 | :"\\141" | \\141 | symbol |
| escapes.rb:67:1:67:5 | :"\\n" | \\n | symbol |
| escapes.rb:70:1:70:5 | :"\\'" | ' | symbol |
| escapes.rb:71:1:71:5 | :"\\"" | " | symbol |
| escapes.rb:72:1:72:5 | :"\\\\" | \\ | symbol |
| escapes.rb:73:1:73:5 | :"\\1" | \u0001 | symbol |
| escapes.rb:74:1:74:6 | :"\\\\1" | \\1 | symbol |
| escapes.rb:75:1:75:7 | :"\\141" | a | symbol |
| escapes.rb:76:1:76:7 | :"\\x6d" | m | symbol |
| escapes.rb:77:1:77:7 | :"\\x6E" | n | symbol |
| escapes.rb:78:1:78:7 | :"\\X6d" | X6d | symbol |
| escapes.rb:79:1:79:7 | :"\\X6E" | X6E | symbol |
| escapes.rb:80:1:80:9 | :"\\u203d" | \u203d | symbol |
| escapes.rb:81:1:81:9 | :"\\u{62}" | b | symbol |
| escapes.rb:82:1:82:12 | :"\\u{1f60a}" | \ud83d\ude0a | symbol |
| escapes.rb:83:1:83:5 | :"\\a" | \u0007 | symbol |
| escapes.rb:84:1:84:5 | :"\\b" | \u0008 | symbol |
| escapes.rb:85:1:85:5 | :"\\t" | \t | symbol |
| escapes.rb:86:1:86:5 | :"\\n" | \n | symbol |
| escapes.rb:87:1:87:5 | :"\\v" | \u000b | symbol |
| escapes.rb:88:1:88:5 | :"\\f" | \u000c | symbol |
| escapes.rb:89:1:89:5 | :"\\r" | \r | symbol |
| escapes.rb:90:1:90:5 | :"\\e" | \u001b | symbol |
| escapes.rb:91:1:91:5 | :"\\s" | | symbol |
| escapes.rb:92:1:92:6 | :"\\c?" | c? | symbol |
| escapes.rb:93:1:93:7 | :"\\C-?" | C-? | symbol |

View File

@@ -0,0 +1,24 @@
import ruby
query predicate stringEscapeSequenceComponents(
StringEscapeSequenceComponent c, string raw, string unescaped
) {
(
unescaped = c.getConstantValue().getString()
or
not exists(c.getConstantValue().getString()) and unescaped = "<none>"
) and
raw = c.getRawText()
}
query predicate regexpEscapeSequenceComponents(RegExpEscapeSequenceComponent c, string stringValue) {
stringValue = c.getConstantValue().getString()
or
not exists(c.getConstantValue().getString()) and stringValue = "<none>"
}
query predicate stringlikeLiterals(StringlikeLiteral l, string value, string kind) {
value = l.getConstantValue().getString() and kind = "string"
or
value = l.getConstantValue().getSymbol() and kind = "symbol"
}

View File

@@ -0,0 +1,93 @@
# Most comments indicate the contents of the string after MRI has parsed the
# escape sequences (i.e. what gets printed by `puts`), and that's what we expect
# `getConstantValue().getString()` to return.
# The only escapes in single-quoted strings are backslash and single-quote.
'\'' # '
'\"' # \"
'\\' # \
'\1' # \1
'\\1' # \1
'\141' # \141
'\n' # \n
# Double-quoted strings
"\'" # '
"\"" # "
"\\" # \
"\1" # <U+0001>
"\\1" # \1
"\141" # a
"\x6d" # m
"\x6E" # n
"\X6d" # X6d
"\X6E" # X6E
"\u203d" # ‽
"\u{62}" # b
"\u{1f60a}" # 😊 <Printed as \ud83d\ude0a by CodeQL>
"\a" # <bell U+0007>
"\b" # <backspace U+0008>
"\t" # <tab U+0009>
"\n" # <newline U+000A>
"\v" # <vertical tab U+000B>
"\f" # <form feed U+000C>
"\r" # <carriage return U+000D>
"\e" # <escape U+001B>
"\s" # <space U+0020>
"\c?" # <delete U+007F> problem: only \c is parsed as part of the escape sequence
"\C-?" # <delete U+007F> problem: only \C is parsed as part of the escape sequence
# TODO: support/test more control characters: \M-..., \cx, \C-x, etc.
# String interpolation
a = "\\." # \.
"#{a}" # \.
# Regexps - escape sequences are handled by the regex parser, so their constant
# value should be interpreted literally and not unescaped as in double-quoted strings
/\n/
/\p/
/\u0061/
# Regexp interpolation
a = "\\." # \.
b = /\./
/#{a}#{b}/ # equivalent to /\.\./
# String arrays
%w[foo \n bar] # should be equivalent to ["foo", "\\n", "bar"], but currently misparsed as ["foo \\n", "bar"]
# Single-quoted symbols. Comments indicate the expected, unescaped string contents.
:'\'' # '
:'\"' # \"
:'\\' # \
:'\1' # \1
:'\\1' # \1
:'\141' # \141
:'\n' # \n
# Double-quoted symbols. Comments indicate the expected, unescaped string contents.
:"\'" # '
:"\"" # "
:"\\" # \
:"\1" # <U+0001>
:"\\1" # \1
:"\141" # a
:"\x6d" # m
:"\x6E" # n
:"\X6d" # X6d
:"\X6E" # X6E
:"\u203d" # ‽
:"\u{62}" # b
:"\u{1f60a}" # 😊 <Printed as \ud83d\ude0a by CodeQL>
:"\a" # <bell U+0007>
:"\b" # <backspace U+0008>
:"\t" # <tab U+0009>
:"\n" # <newline U+000A>
:"\v" # <vertical tab U+000B>
:"\f" # <form feed U+000C>
:"\r" # <carriage return U+000D>
:"\e" # <escape U+001B>
:"\s" # <space U+0020>
:"\c?" # <delete U+007F> problem: only \c is parsed as part of the escape sequence
:"\C-?" # <delete U+007F> problem: only \C is parsed as part of the escape sequence

File diff suppressed because it is too large Load Diff

View File

@@ -11,20 +11,33 @@ TRUE
5_678
0
0d900
2147483647 # max value representable by QL's int type
2147483648 # too large to be representable by an int
# hexadecimal integers
0x1234
0xdeadbeef
0xF00D_face
0xbeef
0xF0_0D
0x000000000000000000ff
0x7FFF_FFFF # max value representable by QL's int type
0x80000000 # too large to be represented by an int
0xdeadbeef # too large to be represented by an int
0xF00D_face # too large to be represented by an int
# octal integers
0123
0o234
0O45_6
0000000000000000000000000000010
017777777777 # max value representable by QL's int type
020000000000 # too large to be represented by an int
# binary integers
0b10010100
0B011_01101
0b00000000000000000000000000000000000000011
0b01111111111111111111111111111111 # max value representable by QL's int type
0b10000000000000000000000000000000 # too large to be represented by an int
# floating-point numbers
12.34

View File

@@ -17,5 +17,5 @@ alias
| misc.rb:8:1:8:14 | alias ... | old | misc.rb:8:12:8:14 | []= | []= | MethodName |
| misc.rb:9:1:9:16 | alias ... | new | misc.rb:9:7:9:11 | super | super | MethodName |
| misc.rb:9:1:9:16 | alias ... | old | misc.rb:9:13:9:16 | self | self | MethodName |
| misc.rb:10:1:10:24 | alias ... | new | misc.rb:10:7:10:17 | :"\\n#{...}" | \\nbar | MethodName |
| misc.rb:10:1:10:24 | alias ... | new | misc.rb:10:7:10:17 | :"\\n#{...}" | \nbar | MethodName |
| misc.rb:10:1:10:24 | alias ... | old | misc.rb:10:19:10:24 | :"foo" | foo | MethodName |

View File

@@ -0,0 +1,22 @@
| app/controllers/users_controller.rb:5:7:5:44 | call to create! | app/controllers/users_controller.rb:5:26:5:29 | "U1" |
| app/controllers/users_controller.rb:5:7:5:44 | call to create! | app/controllers/users_controller.rb:5:37:5:43 | call to get_uid |
| app/controllers/users_controller.rb:6:7:6:29 | call to create | app/controllers/users_controller.rb:6:25:6:28 | "U2" |
| app/controllers/users_controller.rb:7:7:7:31 | call to insert | app/controllers/users_controller.rb:7:26:7:29 | "U3" |
| app/controllers/users_controller.rb:10:7:10:32 | call to update | app/controllers/users_controller.rb:10:28:10:31 | "U4" |
| app/controllers/users_controller.rb:11:7:11:73 | call to update! | app/controllers/users_controller.rb:11:39:11:42 | "U5" |
| app/controllers/users_controller.rb:11:7:11:73 | call to update! | app/controllers/users_controller.rb:11:53:11:56 | "U6" |
| app/controllers/users_controller.rb:11:7:11:73 | call to update! | app/controllers/users_controller.rb:11:67:11:70 | "U7" |
| app/controllers/users_controller.rb:14:7:14:66 | call to insert_all | app/controllers/users_controller.rb:14:31:14:34 | "U8" |
| app/controllers/users_controller.rb:14:7:14:66 | call to insert_all | app/controllers/users_controller.rb:14:45:14:48 | "U9" |
| app/controllers/users_controller.rb:14:7:14:66 | call to insert_all | app/controllers/users_controller.rb:14:59:14:63 | "U10" |
| app/controllers/users_controller.rb:19:7:19:30 | call to update | app/controllers/users_controller.rb:19:25:19:29 | "U11" |
| app/controllers/users_controller.rb:20:7:20:57 | call to update_attributes | app/controllers/users_controller.rb:20:37:20:41 | "U12" |
| app/controllers/users_controller.rb:20:7:20:57 | call to update_attributes | app/controllers/users_controller.rb:20:49:20:55 | call to get_uid |
| app/controllers/users_controller.rb:23:7:23:42 | call to update_attribute | app/controllers/users_controller.rb:23:37:23:41 | "U13" |
| app/controllers/users_controller.rb:26:7:26:15 | ... = ... | app/controllers/users_controller.rb:26:19:26:23 | "U14" |
| app/models/user.rb:4:5:4:28 | call to update | app/models/user.rb:4:23:4:27 | "U15" |
| app/models/user.rb:5:5:5:23 | call to update | app/models/user.rb:5:18:5:22 | "U16" |
| app/models/user.rb:6:5:6:56 | call to update_attributes | app/models/user.rb:6:35:6:39 | "U17" |
| app/models/user.rb:6:5:6:56 | call to update_attributes | app/models/user.rb:6:51:6:54 | true |
| app/models/user.rb:9:5:9:40 | call to update_attribute | app/models/user.rb:9:35:9:39 | "U18" |
| app/models/user.rb:12:5:12:13 | ... = ... | app/models/user.rb:12:17:12:21 | "U19" |

View File

@@ -0,0 +1,6 @@
import codeql.ruby.DataFlow
import codeql.ruby.Concepts
query predicate persistentWriteAccesses(PersistentWriteAccess acc, DataFlow::Node value) {
value = acc.getValue()
}

View File

@@ -0,0 +1,34 @@
module Users
class UsersController < ApplicationController
def create_or_modify
# CreateLikeCall
User.create!(name: "U1", uid: get_uid)
User.create(name: "U2")
User.insert({name: "U3"})
# UpdateLikeClassMethodCall
User.update(4, name: "U4")
User.update!([5, 6, 7], [{name: "U5"}, {name: "U6"}, {name: "U7"}])
# InsertAllLikeCall
User.insert_all([{name: "U8"}, {name: "U9"}, {name: "U10"}])
user = User.find(5)
# UpdateLikeInstanceMethodCall
user.update(name: "U11")
user.update_attributes({name: "U12", uid: get_uid})
# UpdateAttributeCall
user.update_attribute("name", "U13")
# AssignAttributeCall
user.name = "U14"
user.save
end
def get_uid
User.last.id + 1
end
end
end

View File

@@ -0,0 +1,3 @@
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end

View File

@@ -0,0 +1,15 @@
class User < ActiveRecord::Base
def t1
# UpdateLikeInstanceMethodCall
self.update(name: "U15")
update(name: "U16")
self.update_attributes({name: "U17", isAdmin: true})
# UpdateAttributeCall
self.update_attribute("name", "U18")
# AssignAttributeCall
self.name = "U19"
user.save
end
end

View File

@@ -1,6 +1,6 @@
| local_dataflow.rb:1:1:7:3 | self (foo) | local_dataflow.rb:3:8:3:10 | self |
| local_dataflow.rb:1:1:7:3 | self (local_dataflow.rb) | local_dataflow.rb:49:1:53:3 | self |
| local_dataflow.rb:1:1:7:3 | self in foo | local_dataflow.rb:3:8:3:10 | self |
| local_dataflow.rb:1:1:7:3 | self in foo | local_dataflow.rb:1:1:7:3 | self (foo) |
| local_dataflow.rb:1:9:1:9 | a | local_dataflow.rb:1:9:1:9 | a |
| local_dataflow.rb:1:9:1:9 | a | local_dataflow.rb:2:7:2:7 | a |
| local_dataflow.rb:2:3:2:7 | ... = ... | local_dataflow.rb:3:13:3:13 | b |
@@ -71,16 +71,7 @@
| local_dataflow.rb:50:18:50:18 | x | local_dataflow.rb:51:20:51:20 | x |
| local_dataflow.rb:51:9:51:15 | "break" | local_dataflow.rb:51:3:51:15 | break |
| local_dataflow.rb:60:1:90:3 | self (test_case) | local_dataflow.rb:78:12:78:20 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:78:12:78:20 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:79:20:79:26 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:80:24:80:30 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:82:7:82:13 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:83:7:83:13 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:84:7:84:13 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:85:22:85:28 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:86:28:86:34 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:87:20:87:26 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:89:3:89:9 | self |
| local_dataflow.rb:60:1:90:3 | self in test_case | local_dataflow.rb:60:1:90:3 | self (test_case) |
| local_dataflow.rb:60:15:60:15 | x | local_dataflow.rb:60:15:60:15 | x |
| local_dataflow.rb:60:15:60:15 | x | local_dataflow.rb:61:12:61:12 | x |
| local_dataflow.rb:61:7:68:5 | case ... | local_dataflow.rb:61:3:68:5 | ... = ... |

View File

@@ -201,7 +201,6 @@ edges
| string_flow.rb:241:10:241:10 | b [array element] : | string_flow.rb:241:10:241:13 | ...[...] |
| string_flow.rb:242:10:242:10 | b [array element] : | string_flow.rb:242:10:242:13 | ...[...] |
| string_flow.rb:246:5:246:18 | ... = ... : | string_flow.rb:250:26:250:26 | a : |
| string_flow.rb:246:5:246:18 | ... = ... : | string_flow.rb:258:27:258:27 | a : |
| string_flow.rb:246:9:246:18 | call to source : | string_flow.rb:246:5:246:18 | ... = ... : |
| string_flow.rb:246:9:246:18 | call to source : | string_flow.rb:247:10:247:10 | a : |
| string_flow.rb:246:9:246:18 | call to source : | string_flow.rb:248:20:248:20 | a : |
@@ -215,7 +214,6 @@ edges
| string_flow.rb:250:26:250:26 | a : | string_flow.rb:250:10:250:28 | call to scrub |
| string_flow.rb:252:10:252:10 | a : | string_flow.rb:252:10:252:22 | call to scrub! |
| string_flow.rb:253:21:253:21 | a : | string_flow.rb:253:10:253:22 | call to scrub! |
| string_flow.rb:255:5:255:18 | ... = ... : | string_flow.rb:250:26:250:26 | a : |
| string_flow.rb:255:5:255:18 | ... = ... : | string_flow.rb:258:27:258:27 | a : |
| string_flow.rb:255:9:255:18 | call to source : | string_flow.rb:255:5:255:18 | ... = ... : |
| string_flow.rb:255:9:255:18 | call to source : | string_flow.rb:256:5:256:5 | a : |

View File

@@ -5,6 +5,7 @@ track
| type_tracker.rb:2:5:5:7 | return return in field= | type tracker without call steps | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:2:5:5:7 | self (field=) | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:2:5:5:7 | self (field=) | type tracker without call steps | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:2:5:5:7 | self in field= | type tracker with call steps | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:2:5:5:7 | self in field= | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:2:5:5:7 | self in field= | type tracker without call steps | type_tracker.rb:2:5:5:7 | self in field= |
| type_tracker.rb:2:16:2:18 | val | type tracker with call steps | type_tracker.rb:2:16:2:18 | val |
@@ -16,17 +17,10 @@ track
| type_tracker.rb:3:9:3:23 | [post] self | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:3:9:3:23 | [post] self | type tracker without call steps | type_tracker.rb:3:9:3:23 | [post] self |
| type_tracker.rb:3:9:3:23 | call to puts | type tracker without call steps | type_tracker.rb:3:9:3:23 | call to puts |
| type_tracker.rb:3:9:3:23 | self | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:3:9:3:23 | self | type tracker without call steps | type_tracker.rb:3:9:3:23 | self |
| type_tracker.rb:3:14:3:17 | [post] self | type tracker without call steps | type_tracker.rb:3:14:3:17 | [post] self |
| type_tracker.rb:3:14:3:17 | self | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:3:14:3:17 | self | type tracker without call steps | type_tracker.rb:3:14:3:17 | self |
| type_tracker.rb:3:14:3:23 | [post] call to field | type tracker without call steps | type_tracker.rb:3:14:3:23 | [post] call to field |
| type_tracker.rb:3:14:3:23 | call to field | type tracker without call steps | type_tracker.rb:3:14:3:23 | call to field |
| type_tracker.rb:4:9:4:14 | @field | type tracker without call steps | type_tracker.rb:4:9:4:14 | @field |
| type_tracker.rb:4:18:4:20 | val | type tracker without call steps | type_tracker.rb:2:5:5:7 | return return in field= |
| type_tracker.rb:4:18:4:20 | val | type tracker without call steps | type_tracker.rb:4:18:4:20 | val |
| type_tracker.rb:4:18:4:20 | val | type tracker without call steps | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:7:5:9:7 | &block | type tracker without call steps | type_tracker.rb:7:5:9:7 | &block |
| type_tracker.rb:7:5:9:7 | field | type tracker without call steps | type_tracker.rb:7:5:9:7 | field |
| type_tracker.rb:7:5:9:7 | return return in field | type tracker without call steps | type_tracker.rb:3:14:3:23 | call to field |
@@ -41,28 +35,35 @@ track
| type_tracker.rb:12:1:16:3 | m | type tracker without call steps | type_tracker.rb:12:1:16:3 | m |
| type_tracker.rb:12:1:16:3 | return return in m | type tracker without call steps | type_tracker.rb:12:1:16:3 | return return in m |
| type_tracker.rb:12:1:16:3 | self (m) | type tracker without call steps | type_tracker.rb:12:1:16:3 | self (m) |
| type_tracker.rb:12:1:16:3 | self in m | type tracker with call steps | type_tracker.rb:12:1:16:3 | self (m) |
| type_tracker.rb:12:1:16:3 | self in m | type tracker without call steps | type_tracker.rb:12:1:16:3 | self in m |
| type_tracker.rb:13:5:13:7 | var | type tracker without call steps | type_tracker.rb:13:5:13:7 | var |
| type_tracker.rb:13:5:13:23 | ... = ... | type tracker with call steps | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:13:5:13:23 | ... = ... | type tracker with call steps | type_tracker.rb:2:5:5:7 | self in field= |
| type_tracker.rb:13:5:13:23 | ... = ... | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:13:5:13:23 | ... = ... | type tracker without call steps | type_tracker.rb:13:5:13:23 | ... = ... |
| type_tracker.rb:13:11:13:19 | Container | type tracker without call steps | type_tracker.rb:13:11:13:19 | Container |
| type_tracker.rb:13:11:13:19 | [post] Container | type tracker without call steps | type_tracker.rb:13:11:13:19 | [post] Container |
| type_tracker.rb:13:11:13:23 | call to new | type tracker with call steps | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:13:11:13:23 | call to new | type tracker with call steps | type_tracker.rb:2:5:5:7 | self in field= |
| type_tracker.rb:13:11:13:23 | call to new | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:13:11:13:23 | call to new | type tracker without call steps | type_tracker.rb:13:11:13:23 | call to new |
| type_tracker.rb:14:5:14:7 | [post] var | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:14:5:14:7 | [post] var | type tracker without call steps | type_tracker.rb:14:5:14:7 | [post] var |
| type_tracker.rb:14:5:14:13 | ... = ... | type tracker without call steps | type_tracker.rb:14:5:14:13 | ... = ... |
| type_tracker.rb:14:5:14:13 | [post] ... = ... | type tracker without call steps | type_tracker.rb:14:5:14:13 | [post] ... = ... |
| type_tracker.rb:14:5:14:13 | __synth__0 | type tracker without call steps | type_tracker.rb:14:5:14:13 | __synth__0 |
| type_tracker.rb:14:5:14:13 | call to field= | type tracker without call steps | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:14:17:14:23 | "hello" | type tracker with call steps | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:14:17:14:23 | "hello" | type tracker with call steps | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:14:17:14:23 | "hello" | type tracker with call steps with content field | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:14:17:14:23 | "hello" |
| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:15:10:15:18 | call to field |
| type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps with content field | type_tracker.rb:14:5:14:7 | [post] var |
| type_tracker.rb:15:5:15:18 | [post] self | type tracker without call steps | type_tracker.rb:15:5:15:18 | [post] self |
| type_tracker.rb:15:5:15:18 | call to puts | type tracker without call steps | type_tracker.rb:12:1:16:3 | return return in m |
| type_tracker.rb:15:5:15:18 | call to puts | type tracker without call steps | type_tracker.rb:15:5:15:18 | call to puts |
| type_tracker.rb:15:5:15:18 | self | type tracker without call steps | type_tracker.rb:15:5:15:18 | self |
| type_tracker.rb:15:10:15:12 | [post] var | type tracker without call steps | type_tracker.rb:15:10:15:12 | [post] var |
| type_tracker.rb:15:10:15:18 | [post] call to field | type tracker without call steps | type_tracker.rb:15:10:15:18 | [post] call to field |
| type_tracker.rb:15:10:15:18 | call to field | type tracker without call steps | type_tracker.rb:15:10:15:18 | call to field |
@@ -72,30 +73,34 @@ trackEnd
| type_tracker.rb:2:5:5:7 | return return in field= | type_tracker.rb:2:5:5:7 | return return in field= |
| type_tracker.rb:2:5:5:7 | return return in field= | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:2:5:5:7 | self (field=) | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:2:5:5:7 | self (field=) | type_tracker.rb:3:9:3:23 | self |
| type_tracker.rb:2:5:5:7 | self (field=) | type_tracker.rb:3:14:3:17 | self |
| type_tracker.rb:2:5:5:7 | self (field=) | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:2:5:5:7 | self in field= | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:2:5:5:7 | self in field= | type_tracker.rb:2:5:5:7 | self in field= |
| type_tracker.rb:2:5:5:7 | self in field= | type_tracker.rb:3:9:3:23 | self |
| type_tracker.rb:2:5:5:7 | self in field= | type_tracker.rb:3:14:3:17 | self |
| type_tracker.rb:2:5:5:7 | self in field= | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:2:5:5:7 | return return in field= |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:4:9:4:20 | ... = ... |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:4:9:4:20 | ... = ... |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:4:18:4:20 | val |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:4:18:4:20 | val |
| type_tracker.rb:2:16:2:18 | val | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:3:9:3:23 | [post] self | type_tracker.rb:3:9:3:23 | [post] self |
| type_tracker.rb:3:9:3:23 | [post] self | type_tracker.rb:3:14:3:17 | self |
| type_tracker.rb:3:9:3:23 | [post] self | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:3:9:3:23 | call to puts | type_tracker.rb:3:9:3:23 | call to puts |
| type_tracker.rb:3:9:3:23 | self | type_tracker.rb:3:9:3:23 | self |
| type_tracker.rb:3:9:3:23 | self | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:3:14:3:17 | [post] self | type_tracker.rb:3:14:3:17 | [post] self |
| type_tracker.rb:3:14:3:17 | self | type_tracker.rb:3:14:3:17 | self |
| type_tracker.rb:3:14:3:17 | self | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:3:14:3:23 | [post] call to field | type_tracker.rb:3:14:3:23 | [post] call to field |
| type_tracker.rb:3:14:3:23 | call to field | type_tracker.rb:3:14:3:23 | call to field |
| type_tracker.rb:4:9:4:14 | @field | type_tracker.rb:4:9:4:14 | @field |
| type_tracker.rb:4:18:4:20 | val | type_tracker.rb:2:5:5:7 | return return in field= |
| type_tracker.rb:4:18:4:20 | val | type_tracker.rb:4:18:4:20 | val |
| type_tracker.rb:4:18:4:20 | val | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:7:5:9:7 | &block | type_tracker.rb:7:5:9:7 | &block |
| type_tracker.rb:7:5:9:7 | field | type_tracker.rb:1:1:10:3 | Container |
| type_tracker.rb:7:5:9:7 | field | type_tracker.rb:7:5:9:7 | field |
| type_tracker.rb:7:5:9:7 | return return in field | type_tracker.rb:3:14:3:23 | call to field |
| type_tracker.rb:7:5:9:7 | return return in field | type_tracker.rb:7:5:9:7 | return return in field |
@@ -109,26 +114,54 @@ trackEnd
| type_tracker.rb:12:1:16:3 | m | type_tracker.rb:12:1:16:3 | m |
| type_tracker.rb:12:1:16:3 | return return in m | type_tracker.rb:12:1:16:3 | return return in m |
| type_tracker.rb:12:1:16:3 | self (m) | type_tracker.rb:12:1:16:3 | self (m) |
| type_tracker.rb:12:1:16:3 | self (m) | type_tracker.rb:15:5:15:18 | self |
| type_tracker.rb:12:1:16:3 | self in m | type_tracker.rb:12:1:16:3 | self (m) |
| type_tracker.rb:12:1:16:3 | self in m | type_tracker.rb:12:1:16:3 | self in m |
| type_tracker.rb:12:1:16:3 | self in m | type_tracker.rb:15:5:15:18 | self |
| type_tracker.rb:13:5:13:7 | var | type_tracker.rb:13:5:13:7 | var |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:2:5:5:7 | self in field= |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:3:9:3:23 | self |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:3:14:3:17 | self |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:13:5:13:23 | ... = ... |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:14:5:14:7 | var |
| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:15:10:15:12 | var |
| type_tracker.rb:13:11:13:19 | Container | type_tracker.rb:13:11:13:19 | Container |
| type_tracker.rb:13:11:13:19 | [post] Container | type_tracker.rb:13:11:13:19 | [post] Container |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:2:5:5:7 | self (field=) |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:2:5:5:7 | self in field= |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:3:9:3:23 | self |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:3:14:3:17 | self |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:13:5:13:23 | ... = ... |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:13:5:13:23 | ... = ... |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:13:11:13:23 | call to new |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:14:5:14:7 | var |
| type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:15:10:15:12 | var |
| type_tracker.rb:14:5:14:7 | [post] var | type_tracker.rb:7:5:9:7 | self in field |
| type_tracker.rb:14:5:14:7 | [post] var | type_tracker.rb:14:5:14:7 | [post] var |
| type_tracker.rb:14:5:14:7 | [post] var | type_tracker.rb:15:10:15:12 | var |
| type_tracker.rb:14:5:14:13 | ... = ... | type_tracker.rb:14:5:14:13 | ... = ... |
| type_tracker.rb:14:5:14:13 | ... = ... | type_tracker.rb:14:5:14:13 | __synth__0 |
| type_tracker.rb:14:5:14:13 | ... = ... | type_tracker.rb:14:5:14:23 | ... |
| type_tracker.rb:14:5:14:13 | [post] ... = ... | type_tracker.rb:14:5:14:13 | [post] ... = ... |
| type_tracker.rb:14:5:14:13 | __synth__0 | type_tracker.rb:14:5:14:13 | __synth__0 |
| type_tracker.rb:14:5:14:13 | call to field= | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:2:16:2:18 | val |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:4:9:4:20 | ... = ... |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:4:18:4:20 | val |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:5:14:13 | ... = ... |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:5:14:13 | ... = ... |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:5:14:13 | __synth__0 |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:5:14:13 | call to field= |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:5:14:23 | ... |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:17:14:23 | "hello" |
| type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:15:10:15:18 | call to field |
| type_tracker.rb:15:5:15:18 | [post] self | type_tracker.rb:15:5:15:18 | [post] self |
| type_tracker.rb:15:5:15:18 | call to puts | type_tracker.rb:12:1:16:3 | return return in m |
| type_tracker.rb:15:5:15:18 | call to puts | type_tracker.rb:15:5:15:18 | call to puts |
| type_tracker.rb:15:5:15:18 | self | type_tracker.rb:15:5:15:18 | self |
| type_tracker.rb:15:10:15:12 | [post] var | type_tracker.rb:15:10:15:12 | [post] var |
| type_tracker.rb:15:10:15:18 | [post] call to field | type_tracker.rb:15:10:15:18 | [post] call to field |
| type_tracker.rb:15:10:15:18 | call to field | type_tracker.rb:15:10:15:18 | call to field |

View File

@@ -13,6 +13,9 @@ query predicate track(LocalSourceNode src, TypeTracker t, LocalSourceNode dst) {
exists(TypeTracker t2, LocalSourceNode mid | track(src, t2, mid) and dst = mid.track(t2, t))
}
query predicate trackEnd(LocalSourceNode src, LocalSourceNode dst) {
track(src, TypeTracker::end(), dst)
query predicate trackEnd(LocalSourceNode src, DataFlow::Node dst) {
exists(LocalSourceNode end |
track(src, TypeTracker::end(), end) and
end.flowsTo(dst)
)
}

View File

@@ -45,9 +45,9 @@ potentiallyUnsafeSqlExecutingMethodCall
| ActiveRecordInjection.rb:75:5:75:29 | call to order |
| ActiveRecordInjection.rb:80:7:80:40 | call to find_by |
activeRecordModelInstantiations
| ActiveRecordInjection.rb:10:5:10:68 | self | ActiveRecordInjection.rb:5:1:17:3 | User |
| ActiveRecordInjection.rb:8:3:11:5 | self (authenticate) | ActiveRecordInjection.rb:5:1:17:3 | User |
| ActiveRecordInjection.rb:15:5:15:40 | call to find_by | ActiveRecordInjection.rb:1:1:3:3 | UserGroup |
| ActiveRecordInjection.rb:23:5:23:25 | self | ActiveRecordInjection.rb:19:1:25:3 | Admin |
| ActiveRecordInjection.rb:20:3:24:5 | self (delete_by) | ActiveRecordInjection.rb:19:1:25:3 | Admin |
| ActiveRecordInjection.rb:80:7:80:40 | call to find_by | ActiveRecordInjection.rb:5:1:17:3 | User |
| ActiveRecordInjection.rb:85:5:85:33 | call to find_by | ActiveRecordInjection.rb:5:1:17:3 | User |
| ActiveRecordInjection.rb:88:5:88:34 | call to find | ActiveRecordInjection.rb:5:1:17:3 | User |

View File

@@ -29,29 +29,21 @@ regexp.rb:
# 9| [RegExpRange] a{4,8}
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 9| [RegExpNormalChar] 4,8}
# 10| [RegExpConstant, RegExpNormalChar] a
# 10| [RegExpRange] a{,8}
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 10| [RegExpNormalChar] ,8}
# 11| [RegExpConstant, RegExpNormalChar] a
# 11| [InfiniteRepetitionQuantifier, RegExpRange] a{3,}
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 11| [RegExpNormalChar] 3,}
# 12| [RegExpConstant, RegExpNormalChar] a
# 12| [RegExpRange] a{7}
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 12| [RegExpNormalChar] 7}
# 15| [RegExpConstant, RegExpNormalChar] foo
# 15| [RegExpAlt] foo|bar
@@ -180,313 +172,318 @@ regexp.rb:
# 26| [RegExpConstant, RegExpNormalChar] -
# 29| [RegExpCharacterClass] [[a-f]
# 27| [RegExpCharacterClass] [|]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] |
# 27| [RegExpConstant, RegExpNormalChar] |
# 30| [RegExpCharacterClass] [[a-f]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] [
#-----| 1 -> [RegExpCharacterRange] a-f
# 29| [RegExpSequence] [[a-f]A-F]
# 30| [RegExpSequence] [[a-f]A-F]
#-----| 0 -> [RegExpCharacterClass] [[a-f]
#-----| 1 -> [RegExpConstant, RegExpNormalChar] A-F]
# 29| [RegExpConstant, RegExpNormalChar] [
# 30| [RegExpConstant, RegExpNormalChar] [
# 29| [RegExpConstant, RegExpNormalChar] a
# 30| [RegExpConstant, RegExpNormalChar] a
# 29| [RegExpCharacterRange] a-f
# 30| [RegExpCharacterRange] a-f
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] f
# 29| [RegExpConstant, RegExpNormalChar] f
# 30| [RegExpConstant, RegExpNormalChar] f
# 29| [RegExpConstant, RegExpNormalChar] A-F]
# 32| [RegExpDot] .
# 32| [RegExpStar] .*
#-----| 0 -> [RegExpDot] .
# 30| [RegExpConstant, RegExpNormalChar] A-F]
# 33| [RegExpDot] .
# 33| [RegExpStar] .*
#-----| 0 -> [RegExpDot] .
# 34| [RegExpCharacterClassEscape] \w
# 34| [RegExpDot] .
# 34| [RegExpPlus] \w+
# 34| [RegExpStar] .*
#-----| 0 -> [RegExpDot] .
# 35| [RegExpCharacterClassEscape] \w
# 35| [RegExpPlus] \w+
#-----| 0 -> [RegExpCharacterClassEscape] \w
# 34| [RegExpSequence] \w+\W
# 35| [RegExpSequence] \w+\W
#-----| 0 -> [RegExpPlus] \w+
#-----| 1 -> [RegExpCharacterClassEscape] \W
# 34| [RegExpCharacterClassEscape] \W
# 35| [RegExpCharacterClassEscape] \W
# 35| [RegExpCharacterClassEscape] \s
# 36| [RegExpCharacterClassEscape] \s
# 35| [RegExpSequence] \s\S
# 36| [RegExpSequence] \s\S
#-----| 0 -> [RegExpCharacterClassEscape] \s
#-----| 1 -> [RegExpCharacterClassEscape] \S
# 35| [RegExpCharacterClassEscape] \S
# 36| [RegExpCharacterClassEscape] \S
# 36| [RegExpCharacterClassEscape] \d
# 37| [RegExpCharacterClassEscape] \d
# 36| [RegExpSequence] \d\D
# 37| [RegExpSequence] \d\D
#-----| 0 -> [RegExpCharacterClassEscape] \d
#-----| 1 -> [RegExpCharacterClassEscape] \D
# 36| [RegExpCharacterClassEscape] \D
# 37| [RegExpCharacterClassEscape] \D
# 37| [RegExpCharacterClassEscape] \h
# 38| [RegExpCharacterClassEscape] \h
# 37| [RegExpSequence] \h\H
# 38| [RegExpSequence] \h\H
#-----| 0 -> [RegExpCharacterClassEscape] \h
#-----| 1 -> [RegExpCharacterClassEscape] \H
# 37| [RegExpCharacterClassEscape] \H
# 38| [RegExpCharacterClassEscape] \H
# 38| [RegExpConstant, RegExpEscape] \n
# 39| [RegExpConstant, RegExpEscape] \n
# 38| [RegExpSequence] \n\r\t
# 39| [RegExpSequence] \n\r\t
#-----| 0 -> [RegExpConstant, RegExpEscape] \n
#-----| 1 -> [RegExpConstant, RegExpEscape] \r
#-----| 2 -> [RegExpConstant, RegExpEscape] \t
# 38| [RegExpConstant, RegExpEscape] \r
# 39| [RegExpConstant, RegExpEscape] \r
# 38| [RegExpConstant, RegExpEscape] \t
# 39| [RegExpConstant, RegExpEscape] \t
# 41| [RegExpSpecialChar] \G
# 42| [RegExpSpecialChar] \G
# 41| [RegExpSequence] \Gabc
# 42| [RegExpSequence] \Gabc
#-----| 0 -> [RegExpSpecialChar] \G
#-----| 1 -> [RegExpConstant, RegExpNormalChar] abc
# 41| [RegExpConstant, RegExpNormalChar] abc
# 42| [RegExpConstant, RegExpNormalChar] abc
# 42| [RegExpSpecialChar] \b
# 43| [RegExpSpecialChar] \b
# 42| [RegExpSequence] \b!a\B
# 43| [RegExpSequence] \b!a\B
#-----| 0 -> [RegExpSpecialChar] \b
#-----| 1 -> [RegExpConstant, RegExpNormalChar] !a
#-----| 2 -> [RegExpSpecialChar] \B
# 42| [RegExpConstant, RegExpNormalChar] !a
# 43| [RegExpConstant, RegExpNormalChar] !a
# 42| [RegExpSpecialChar] \B
# 43| [RegExpSpecialChar] \B
# 45| [RegExpGroup] (foo)
# 46| [RegExpGroup] (foo)
#-----| 0 -> [RegExpConstant, RegExpNormalChar] foo
# 45| [RegExpStar] (foo)*
# 46| [RegExpStar] (foo)*
#-----| 0 -> [RegExpGroup] (foo)
# 45| [RegExpSequence] (foo)*bar
# 46| [RegExpSequence] (foo)*bar
#-----| 0 -> [RegExpStar] (foo)*
#-----| 1 -> [RegExpConstant, RegExpNormalChar] bar
# 45| [RegExpConstant, RegExpNormalChar] foo
# 46| [RegExpConstant, RegExpNormalChar] foo
# 45| [RegExpConstant, RegExpNormalChar] bar
# 46| [RegExpConstant, RegExpNormalChar] bar
# 46| [RegExpConstant, RegExpNormalChar] fo
# 47| [RegExpConstant, RegExpNormalChar] fo
# 46| [RegExpSequence] fo(o|b)ar
# 47| [RegExpSequence] fo(o|b)ar
#-----| 0 -> [RegExpConstant, RegExpNormalChar] fo
#-----| 1 -> [RegExpGroup] (o|b)
#-----| 2 -> [RegExpConstant, RegExpNormalChar] ar
# 46| [RegExpGroup] (o|b)
# 47| [RegExpGroup] (o|b)
#-----| 0 -> [RegExpAlt] o|b
# 46| [RegExpConstant, RegExpNormalChar] o
# 47| [RegExpConstant, RegExpNormalChar] o
# 46| [RegExpAlt] o|b
# 47| [RegExpAlt] o|b
#-----| 0 -> [RegExpConstant, RegExpNormalChar] o
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
# 46| [RegExpConstant, RegExpNormalChar] b
# 47| [RegExpConstant, RegExpNormalChar] b
# 46| [RegExpConstant, RegExpNormalChar] ar
# 47| [RegExpConstant, RegExpNormalChar] ar
# 47| [RegExpGroup] (a|b|cd)
# 48| [RegExpGroup] (a|b|cd)
#-----| 0 -> [RegExpAlt] a|b|cd
# 47| [RegExpSequence] (a|b|cd)e
# 48| [RegExpSequence] (a|b|cd)e
#-----| 0 -> [RegExpGroup] (a|b|cd)
#-----| 1 -> [RegExpConstant, RegExpNormalChar] e
# 47| [RegExpConstant, RegExpNormalChar] a
# 48| [RegExpConstant, RegExpNormalChar] a
# 47| [RegExpAlt] a|b|cd
# 48| [RegExpAlt] a|b|cd
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
#-----| 2 -> [RegExpConstant, RegExpNormalChar] cd
# 47| [RegExpConstant, RegExpNormalChar] b
# 48| [RegExpConstant, RegExpNormalChar] b
# 47| [RegExpConstant, RegExpNormalChar] cd
# 48| [RegExpConstant, RegExpNormalChar] cd
# 47| [RegExpConstant, RegExpNormalChar] e
# 48| [RegExpConstant, RegExpNormalChar] e
# 48| [RegExpGroup] (?::+)
# 49| [RegExpGroup] (?::+)
#-----| 0 -> [RegExpPlus] :+
# 48| [RegExpSequence] (?::+)\w
# 49| [RegExpSequence] (?::+)\w
#-----| 0 -> [RegExpGroup] (?::+)
#-----| 1 -> [RegExpCharacterClassEscape] \w
# 48| [RegExpConstant, RegExpNormalChar] :
# 49| [RegExpConstant, RegExpNormalChar] :
# 48| [RegExpPlus] :+
# 49| [RegExpPlus] :+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] :
# 48| [RegExpCharacterClassEscape] \w
# 49| [RegExpCharacterClassEscape] \w
# 51| [RegExpGroup] (?<id>\w+)
# 52| [RegExpGroup] (?<id>\w+)
#-----| 0 -> [RegExpPlus] \w+
# 51| [RegExpCharacterClassEscape] \w
# 52| [RegExpCharacterClassEscape] \w
# 51| [RegExpPlus] \w+
# 52| [RegExpPlus] \w+
#-----| 0 -> [RegExpCharacterClassEscape] \w
# 52| [RegExpGroup] (?'foo'fo+)
# 53| [RegExpGroup] (?'foo'fo+)
#-----| 0 -> [RegExpSequence] fo+
# 52| [RegExpConstant, RegExpNormalChar] f
# 53| [RegExpConstant, RegExpNormalChar] f
# 52| [RegExpSequence] fo+
# 53| [RegExpSequence] fo+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] f
#-----| 1 -> [RegExpPlus] o+
# 52| [RegExpConstant, RegExpNormalChar] o
# 53| [RegExpConstant, RegExpNormalChar] o
# 52| [RegExpPlus] o+
# 53| [RegExpPlus] o+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] o
# 55| [RegExpGroup] (a+)
# 56| [RegExpGroup] (a+)
#-----| 0 -> [RegExpPlus] a+
# 55| [RegExpSequence] (a+)b+\1
# 56| [RegExpSequence] (a+)b+\1
#-----| 0 -> [RegExpGroup] (a+)
#-----| 1 -> [RegExpPlus] b+
#-----| 2 -> [RegExpBackRef] \1
# 55| [RegExpConstant, RegExpNormalChar] a
# 56| [RegExpConstant, RegExpNormalChar] a
# 55| [RegExpPlus] a+
# 56| [RegExpPlus] a+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 55| [RegExpConstant, RegExpNormalChar] b
# 56| [RegExpConstant, RegExpNormalChar] b
# 55| [RegExpPlus] b+
# 56| [RegExpPlus] b+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] b
# 55| [RegExpBackRef] \1
# 56| [RegExpBackRef] \1
# 56| [RegExpGroup] (?<qux>q+)
# 57| [RegExpGroup] (?<qux>q+)
#-----| 0 -> [RegExpPlus] q+
# 56| [RegExpSequence] (?<qux>q+)\s+\k<qux>+
# 57| [RegExpSequence] (?<qux>q+)\s+\k<qux>+
#-----| 0 -> [RegExpGroup] (?<qux>q+)
#-----| 1 -> [RegExpPlus] \s+
#-----| 2 -> [RegExpPlus] \k<qux>+
# 56| [RegExpConstant, RegExpNormalChar] q
# 57| [RegExpConstant, RegExpNormalChar] q
# 56| [RegExpPlus] q+
# 57| [RegExpPlus] q+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] q
# 56| [RegExpCharacterClassEscape] \s
# 57| [RegExpCharacterClassEscape] \s
# 56| [RegExpPlus] \s+
# 57| [RegExpPlus] \s+
#-----| 0 -> [RegExpCharacterClassEscape] \s
# 56| [RegExpBackRef] \k<qux>
# 57| [RegExpBackRef] \k<qux>
# 56| [RegExpPlus] \k<qux>+
# 57| [RegExpPlus] \k<qux>+
#-----| 0 -> [RegExpBackRef] \k<qux>
# 59| [RegExpNamedCharacterProperty] \p{Word}
# 60| [RegExpNamedCharacterProperty] \p{Word}
# 59| [RegExpStar] \p{Word}*
# 60| [RegExpStar] \p{Word}*
#-----| 0 -> [RegExpNamedCharacterProperty] \p{Word}
# 60| [RegExpNamedCharacterProperty] \P{Digit}
# 61| [RegExpNamedCharacterProperty] \P{Digit}
# 60| [RegExpPlus] \P{Digit}+
# 61| [RegExpPlus] \P{Digit}+
#-----| 0 -> [RegExpNamedCharacterProperty] \P{Digit}
# 61| [RegExpNamedCharacterProperty] \p{^Alnum}
# 62| [RegExpNamedCharacterProperty] \p{^Alnum}
# 61| [RegExpRange] \p{^Alnum}{2,3}
# 62| [RegExpRange] \p{^Alnum}{2,3}
#-----| 0 -> [RegExpNamedCharacterProperty] \p{^Alnum}
# 61| [RegExpNormalChar] 2,3}
# 62| [RegExpCharacterClass] [a-f\p{Digit}]
# 63| [RegExpCharacterClass] [a-f\p{Digit}]
#-----| 0 -> [RegExpCharacterRange] a-f
#-----| 1 -> [RegExpNamedCharacterProperty] \p{Digit}
# 62| [RegExpPlus] [a-f\p{Digit}]+
# 63| [RegExpPlus] [a-f\p{Digit}]+
#-----| 0 -> [RegExpCharacterClass] [a-f\p{Digit}]
# 62| [RegExpConstant, RegExpNormalChar] a
# 63| [RegExpConstant, RegExpNormalChar] a
# 62| [RegExpCharacterRange] a-f
# 63| [RegExpCharacterRange] a-f
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] f
# 62| [RegExpConstant, RegExpNormalChar] f
# 63| [RegExpConstant, RegExpNormalChar] f
# 62| [RegExpNamedCharacterProperty] \p{Digit}
# 63| [RegExpNamedCharacterProperty] \p{Digit}
# 65| [RegExpCharacterClass] [[:alpha:]]
# 66| [RegExpCharacterClass] [[:alpha:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
# 65| [RegExpSequence] [[:alpha:]][[:digit:]]
# 66| [RegExpSequence] [[:alpha:]][[:digit:]]
#-----| 0 -> [RegExpCharacterClass] [[:alpha:]]
#-----| 1 -> [RegExpCharacterClass] [[:digit:]]
# 65| [RegExpNamedCharacterProperty] [:alpha:]
# 66| [RegExpNamedCharacterProperty] [:alpha:]
# 65| [RegExpCharacterClass] [[:digit:]]
# 66| [RegExpCharacterClass] [[:digit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:digit:]
# 65| [RegExpNamedCharacterProperty] [:digit:]
# 66| [RegExpNamedCharacterProperty] [:digit:]
# 68| [RegExpCharacterClass] [[:alpha:][:digit:]]
# 69| [RegExpCharacterClass] [[:alpha:][:digit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:]
# 68| [RegExpNamedCharacterProperty] [:alpha:]
# 69| [RegExpNamedCharacterProperty] [:alpha:]
# 68| [RegExpNamedCharacterProperty] [:digit:]
# 69| [RegExpNamedCharacterProperty] [:digit:]
# 71| [RegExpCharacterClass] [A-F[:digit:]a-f]
# 72| [RegExpCharacterClass] [A-F[:digit:]a-f]
#-----| 0 -> [RegExpCharacterRange] A-F
#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:]
#-----| 2 -> [RegExpCharacterRange] a-f
# 71| [RegExpConstant, RegExpNormalChar] A
# 72| [RegExpConstant, RegExpNormalChar] A
# 71| [RegExpCharacterRange] A-F
# 72| [RegExpCharacterRange] A-F
#-----| 0 -> [RegExpConstant, RegExpNormalChar] A
#-----| 1 -> [RegExpConstant, RegExpNormalChar] F
# 71| [RegExpConstant, RegExpNormalChar] F
# 72| [RegExpConstant, RegExpNormalChar] F
# 71| [RegExpNamedCharacterProperty] [:digit:]
# 72| [RegExpNamedCharacterProperty] [:digit:]
# 71| [RegExpConstant, RegExpNormalChar] a
# 72| [RegExpConstant, RegExpNormalChar] a
# 71| [RegExpCharacterRange] a-f
# 72| [RegExpCharacterRange] a-f
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] f
# 71| [RegExpConstant, RegExpNormalChar] f
# 72| [RegExpConstant, RegExpNormalChar] f
# 74| [RegExpNamedCharacterProperty] [:digit:]
# 75| [RegExpNamedCharacterProperty] [:digit:]
# 78| [RegExpConstant, RegExpNormalChar] abc
# 79| [RegExpConstant, RegExpNormalChar] abc
# 82| [RegExpConstant, RegExpEscape] \u{987

View File

@@ -0,0 +1,273 @@
groupName
| regexp.rb:52:2:52:11 | (?<id>\\w+) | id |
| regexp.rb:53:2:53:12 | (?'foo'fo+) | foo |
| regexp.rb:57:2:57:11 | (?<qux>q+) | qux |
groupNumber
| regexp.rb:46:2:46:6 | (foo) | 1 |
| regexp.rb:47:4:47:8 | (o\|b) | 1 |
| regexp.rb:48:2:48:9 | (a\|b\|cd) | 1 |
| regexp.rb:49:2:49:7 | (?::+) | 1 |
| regexp.rb:52:2:52:11 | (?<id>\\w+) | 1 |
| regexp.rb:53:2:53:12 | (?'foo'fo+) | 1 |
| regexp.rb:56:2:56:5 | (a+) | 1 |
| regexp.rb:57:2:57:11 | (?<qux>q+) | 1 |
term
| regexp.rb:5:2:5:4 | abc | RegExpConstant,RegExpNormalChar |
| regexp.rb:8:2:8:2 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:8:2:8:3 | a* | RegExpStar |
| regexp.rb:8:2:8:8 | a*b+c?d | RegExpSequence |
| regexp.rb:8:4:8:4 | b | RegExpConstant,RegExpNormalChar |
| regexp.rb:8:4:8:5 | b+ | RegExpPlus |
| regexp.rb:8:6:8:6 | c | RegExpConstant,RegExpNormalChar |
| regexp.rb:8:6:8:7 | c? | RegExpOpt |
| regexp.rb:8:8:8:8 | d | RegExpConstant,RegExpNormalChar |
| regexp.rb:9:2:9:2 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:9:2:9:7 | a{4,8} | RegExpRange |
| regexp.rb:10:2:10:2 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:10:2:10:6 | a{,8} | RegExpRange |
| regexp.rb:11:2:11:2 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:11:2:11:6 | a{3,} | InfiniteRepetitionQuantifier,RegExpRange |
| regexp.rb:12:2:12:2 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:12:2:12:5 | a{7} | RegExpRange |
| regexp.rb:15:2:15:4 | foo | RegExpConstant,RegExpNormalChar |
| regexp.rb:15:2:15:8 | foo\|bar | RegExpAlt |
| regexp.rb:15:6:15:8 | bar | RegExpConstant,RegExpNormalChar |
| regexp.rb:18:2:18:6 | [abc] | RegExpCharacterClass |
| regexp.rb:18:3:18:3 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:18:4:18:4 | b | RegExpConstant,RegExpNormalChar |
| regexp.rb:18:5:18:5 | c | RegExpConstant,RegExpNormalChar |
| regexp.rb:19:2:19:13 | [a-fA-F0-9_] | RegExpCharacterClass |
| regexp.rb:19:3:19:3 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:19:3:19:5 | a-f | RegExpCharacterRange |
| regexp.rb:19:5:19:5 | f | RegExpConstant,RegExpNormalChar |
| regexp.rb:19:6:19:6 | A | RegExpConstant,RegExpNormalChar |
| regexp.rb:19:6:19:8 | A-F | RegExpCharacterRange |
| regexp.rb:19:8:19:8 | F | RegExpConstant,RegExpNormalChar |
| regexp.rb:19:9:19:9 | 0 | RegExpConstant,RegExpNormalChar |
| regexp.rb:19:9:19:11 | 0-9 | RegExpCharacterRange |
| regexp.rb:19:11:19:11 | 9 | RegExpConstant,RegExpNormalChar |
| regexp.rb:19:12:19:12 | _ | RegExpConstant,RegExpNormalChar |
| regexp.rb:20:2:20:3 | \\A | RegExpCaret |
| regexp.rb:20:2:20:11 | \\A[+-]?\\d+ | RegExpSequence |
| regexp.rb:20:4:20:7 | [+-] | RegExpCharacterClass |
| regexp.rb:20:4:20:8 | [+-]? | RegExpOpt |
| regexp.rb:20:5:20:5 | + | RegExpConstant,RegExpNormalChar |
| regexp.rb:20:6:20:6 | - | RegExpConstant,RegExpNormalChar |
| regexp.rb:20:9:20:10 | \\d | RegExpCharacterClassEscape |
| regexp.rb:20:9:20:11 | \\d+ | RegExpPlus |
| regexp.rb:21:2:21:5 | [\\w] | RegExpCharacterClass |
| regexp.rb:21:2:21:6 | [\\w]+ | RegExpPlus |
| regexp.rb:21:3:21:4 | \\w | RegExpCharacterClassEscape |
| regexp.rb:22:2:22:3 | \\[ | RegExpConstant,RegExpEscape |
| regexp.rb:22:2:22:10 | \\[\\][123] | RegExpSequence |
| regexp.rb:22:4:22:5 | \\] | RegExpConstant,RegExpEscape |
| regexp.rb:22:6:22:10 | [123] | RegExpCharacterClass |
| regexp.rb:22:7:22:7 | 1 | RegExpConstant,RegExpNormalChar |
| regexp.rb:22:8:22:8 | 2 | RegExpConstant,RegExpNormalChar |
| regexp.rb:22:9:22:9 | 3 | RegExpConstant,RegExpNormalChar |
| regexp.rb:23:2:23:7 | [^A-Z] | RegExpCharacterClass |
| regexp.rb:23:4:23:4 | A | RegExpConstant,RegExpNormalChar |
| regexp.rb:23:4:23:6 | A-Z | RegExpCharacterRange |
| regexp.rb:23:6:23:6 | Z | RegExpConstant,RegExpNormalChar |
| regexp.rb:24:2:24:4 | []] | RegExpCharacterClass |
| regexp.rb:24:3:24:3 | ] | RegExpConstant,RegExpNormalChar |
| regexp.rb:25:2:25:5 | [^]] | RegExpCharacterClass |
| regexp.rb:25:4:25:4 | ] | RegExpConstant,RegExpNormalChar |
| regexp.rb:26:2:26:5 | [^-] | RegExpCharacterClass |
| regexp.rb:26:4:26:4 | - | RegExpConstant,RegExpNormalChar |
| regexp.rb:27:2:27:4 | [\|] | RegExpCharacterClass |
| regexp.rb:27:3:27:3 | \| | RegExpConstant,RegExpNormalChar |
| regexp.rb:30:2:30:7 | [[a-f] | RegExpCharacterClass |
| regexp.rb:30:2:30:11 | [[a-f]A-F] | RegExpSequence |
| regexp.rb:30:3:30:3 | [ | RegExpConstant,RegExpNormalChar |
| regexp.rb:30:4:30:4 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:30:4:30:6 | a-f | RegExpCharacterRange |
| regexp.rb:30:6:30:6 | f | RegExpConstant,RegExpNormalChar |
| regexp.rb:30:8:30:11 | A-F] | RegExpConstant,RegExpNormalChar |
| regexp.rb:33:2:33:2 | . | RegExpDot |
| regexp.rb:33:2:33:3 | .* | RegExpStar |
| regexp.rb:34:2:34:2 | . | RegExpDot |
| regexp.rb:34:2:34:3 | .* | RegExpStar |
| regexp.rb:35:2:35:3 | \\w | RegExpCharacterClassEscape |
| regexp.rb:35:2:35:4 | \\w+ | RegExpPlus |
| regexp.rb:35:2:35:6 | \\w+\\W | RegExpSequence |
| regexp.rb:35:5:35:6 | \\W | RegExpCharacterClassEscape |
| regexp.rb:36:2:36:3 | \\s | RegExpCharacterClassEscape |
| regexp.rb:36:2:36:5 | \\s\\S | RegExpSequence |
| regexp.rb:36:4:36:5 | \\S | RegExpCharacterClassEscape |
| regexp.rb:37:2:37:3 | \\d | RegExpCharacterClassEscape |
| regexp.rb:37:2:37:5 | \\d\\D | RegExpSequence |
| regexp.rb:37:4:37:5 | \\D | RegExpCharacterClassEscape |
| regexp.rb:38:2:38:3 | \\h | RegExpCharacterClassEscape |
| regexp.rb:38:2:38:5 | \\h\\H | RegExpSequence |
| regexp.rb:38:4:38:5 | \\H | RegExpCharacterClassEscape |
| regexp.rb:39:2:39:3 | \\n | RegExpConstant,RegExpEscape |
| regexp.rb:39:2:39:7 | \\n\\r\\t | RegExpSequence |
| regexp.rb:39:4:39:5 | \\r | RegExpConstant,RegExpEscape |
| regexp.rb:39:6:39:7 | \\t | RegExpConstant,RegExpEscape |
| regexp.rb:42:2:42:3 | \\G | RegExpSpecialChar |
| regexp.rb:42:2:42:6 | \\Gabc | RegExpSequence |
| regexp.rb:42:4:42:6 | abc | RegExpConstant,RegExpNormalChar |
| regexp.rb:43:2:43:3 | \\b | RegExpSpecialChar |
| regexp.rb:43:2:43:7 | \\b!a\\B | RegExpSequence |
| regexp.rb:43:4:43:5 | !a | RegExpConstant,RegExpNormalChar |
| regexp.rb:43:6:43:7 | \\B | RegExpSpecialChar |
| regexp.rb:46:2:46:6 | (foo) | RegExpGroup |
| regexp.rb:46:2:46:7 | (foo)* | RegExpStar |
| regexp.rb:46:2:46:10 | (foo)*bar | RegExpSequence |
| regexp.rb:46:3:46:5 | foo | RegExpConstant,RegExpNormalChar |
| regexp.rb:46:8:46:10 | bar | RegExpConstant,RegExpNormalChar |
| regexp.rb:47:2:47:3 | fo | RegExpConstant,RegExpNormalChar |
| regexp.rb:47:2:47:10 | fo(o\|b)ar | RegExpSequence |
| regexp.rb:47:4:47:8 | (o\|b) | RegExpGroup |
| regexp.rb:47:5:47:5 | o | RegExpConstant,RegExpNormalChar |
| regexp.rb:47:5:47:7 | o\|b | RegExpAlt |
| regexp.rb:47:7:47:7 | b | RegExpConstant,RegExpNormalChar |
| regexp.rb:47:9:47:10 | ar | RegExpConstant,RegExpNormalChar |
| regexp.rb:48:2:48:9 | (a\|b\|cd) | RegExpGroup |
| regexp.rb:48:2:48:10 | (a\|b\|cd)e | RegExpSequence |
| regexp.rb:48:3:48:3 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:48:3:48:8 | a\|b\|cd | RegExpAlt |
| regexp.rb:48:5:48:5 | b | RegExpConstant,RegExpNormalChar |
| regexp.rb:48:7:48:8 | cd | RegExpConstant,RegExpNormalChar |
| regexp.rb:48:10:48:10 | e | RegExpConstant,RegExpNormalChar |
| regexp.rb:49:2:49:7 | (?::+) | RegExpGroup |
| regexp.rb:49:2:49:9 | (?::+)\\w | RegExpSequence |
| regexp.rb:49:5:49:5 | : | RegExpConstant,RegExpNormalChar |
| regexp.rb:49:5:49:6 | :+ | RegExpPlus |
| regexp.rb:49:8:49:9 | \\w | RegExpCharacterClassEscape |
| regexp.rb:52:2:52:11 | (?<id>\\w+) | RegExpGroup |
| regexp.rb:52:8:52:9 | \\w | RegExpCharacterClassEscape |
| regexp.rb:52:8:52:10 | \\w+ | RegExpPlus |
| regexp.rb:53:2:53:12 | (?'foo'fo+) | RegExpGroup |
| regexp.rb:53:9:53:9 | f | RegExpConstant,RegExpNormalChar |
| regexp.rb:53:9:53:11 | fo+ | RegExpSequence |
| regexp.rb:53:10:53:10 | o | RegExpConstant,RegExpNormalChar |
| regexp.rb:53:10:53:11 | o+ | RegExpPlus |
| regexp.rb:56:2:56:5 | (a+) | RegExpGroup |
| regexp.rb:56:2:56:9 | (a+)b+\\1 | RegExpSequence |
| regexp.rb:56:3:56:3 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:56:3:56:4 | a+ | RegExpPlus |
| regexp.rb:56:6:56:6 | b | RegExpConstant,RegExpNormalChar |
| regexp.rb:56:6:56:7 | b+ | RegExpPlus |
| regexp.rb:56:8:56:9 | \\1 | RegExpBackRef |
| regexp.rb:57:2:57:11 | (?<qux>q+) | RegExpGroup |
| regexp.rb:57:2:57:22 | (?<qux>q+)\\s+\\k<qux>+ | RegExpSequence |
| regexp.rb:57:9:57:9 | q | RegExpConstant,RegExpNormalChar |
| regexp.rb:57:9:57:10 | q+ | RegExpPlus |
| regexp.rb:57:12:57:13 | \\s | RegExpCharacterClassEscape |
| regexp.rb:57:12:57:14 | \\s+ | RegExpPlus |
| regexp.rb:57:15:57:21 | \\k<qux> | RegExpBackRef |
| regexp.rb:57:15:57:22 | \\k<qux>+ | RegExpPlus |
| regexp.rb:60:2:60:9 | \\p{Word} | RegExpNamedCharacterProperty |
| regexp.rb:60:2:60:10 | \\p{Word}* | RegExpStar |
| regexp.rb:61:2:61:10 | \\P{Digit} | RegExpNamedCharacterProperty |
| regexp.rb:61:2:61:11 | \\P{Digit}+ | RegExpPlus |
| regexp.rb:62:2:62:11 | \\p{^Alnum} | RegExpNamedCharacterProperty |
| regexp.rb:62:2:62:16 | \\p{^Alnum}{2,3} | RegExpRange |
| regexp.rb:63:2:63:15 | [a-f\\p{Digit}] | RegExpCharacterClass |
| regexp.rb:63:2:63:16 | [a-f\\p{Digit}]+ | RegExpPlus |
| regexp.rb:63:3:63:3 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:63:3:63:5 | a-f | RegExpCharacterRange |
| regexp.rb:63:5:63:5 | f | RegExpConstant,RegExpNormalChar |
| regexp.rb:63:6:63:14 | \\p{Digit} | RegExpNamedCharacterProperty |
| regexp.rb:66:2:66:12 | [[:alpha:]] | RegExpCharacterClass |
| regexp.rb:66:2:66:23 | [[:alpha:]][[:digit:]] | RegExpSequence |
| regexp.rb:66:3:66:11 | [:alpha:] | RegExpNamedCharacterProperty |
| regexp.rb:66:13:66:23 | [[:digit:]] | RegExpCharacterClass |
| regexp.rb:66:14:66:22 | [:digit:] | RegExpNamedCharacterProperty |
| regexp.rb:69:2:69:21 | [[:alpha:][:digit:]] | RegExpCharacterClass |
| regexp.rb:69:3:69:11 | [:alpha:] | RegExpNamedCharacterProperty |
| regexp.rb:69:12:69:20 | [:digit:] | RegExpNamedCharacterProperty |
| regexp.rb:72:2:72:18 | [A-F[:digit:]a-f] | RegExpCharacterClass |
| regexp.rb:72:3:72:3 | A | RegExpConstant,RegExpNormalChar |
| regexp.rb:72:3:72:5 | A-F | RegExpCharacterRange |
| regexp.rb:72:5:72:5 | F | RegExpConstant,RegExpNormalChar |
| regexp.rb:72:6:72:14 | [:digit:] | RegExpNamedCharacterProperty |
| regexp.rb:72:15:72:15 | a | RegExpConstant,RegExpNormalChar |
| regexp.rb:72:15:72:17 | a-f | RegExpCharacterRange |
| regexp.rb:72:17:72:17 | f | RegExpConstant,RegExpNormalChar |
| regexp.rb:75:2:75:10 | [:digit:] | RegExpNamedCharacterProperty |
| regexp.rb:79:2:79:4 | abc | RegExpConstant,RegExpNormalChar |
| regexp.rb:82:2:82:7 | \\u{987 | RegExpConstant,RegExpEscape |
regExpNormalCharValue
| regexp.rb:5:2:5:4 | abc | abc |
| regexp.rb:8:2:8:2 | a | a |
| regexp.rb:8:4:8:4 | b | b |
| regexp.rb:8:6:8:6 | c | c |
| regexp.rb:8:8:8:8 | d | d |
| regexp.rb:9:2:9:2 | a | a |
| regexp.rb:10:2:10:2 | a | a |
| regexp.rb:11:2:11:2 | a | a |
| regexp.rb:12:2:12:2 | a | a |
| regexp.rb:15:2:15:4 | foo | foo |
| regexp.rb:15:6:15:8 | bar | bar |
| regexp.rb:18:3:18:3 | a | a |
| regexp.rb:18:4:18:4 | b | b |
| regexp.rb:18:5:18:5 | c | c |
| regexp.rb:19:3:19:3 | a | a |
| regexp.rb:19:5:19:5 | f | f |
| regexp.rb:19:6:19:6 | A | A |
| regexp.rb:19:8:19:8 | F | F |
| regexp.rb:19:9:19:9 | 0 | 0 |
| regexp.rb:19:11:19:11 | 9 | 9 |
| regexp.rb:19:12:19:12 | _ | _ |
| regexp.rb:20:5:20:5 | + | + |
| regexp.rb:20:6:20:6 | - | - |
| regexp.rb:20:9:20:10 | \\d | d |
| regexp.rb:21:3:21:4 | \\w | w |
| regexp.rb:22:2:22:3 | \\[ | [ |
| regexp.rb:22:4:22:5 | \\] | ] |
| regexp.rb:22:7:22:7 | 1 | 1 |
| regexp.rb:22:8:22:8 | 2 | 2 |
| regexp.rb:22:9:22:9 | 3 | 3 |
| regexp.rb:23:4:23:4 | A | A |
| regexp.rb:23:6:23:6 | Z | Z |
| regexp.rb:24:3:24:3 | ] | ] |
| regexp.rb:25:4:25:4 | ] | ] |
| regexp.rb:26:4:26:4 | - | - |
| regexp.rb:27:3:27:3 | \| | \| |
| regexp.rb:30:3:30:3 | [ | [ |
| regexp.rb:30:4:30:4 | a | a |
| regexp.rb:30:6:30:6 | f | f |
| regexp.rb:30:8:30:11 | A-F] | A-F] |
| regexp.rb:35:2:35:3 | \\w | w |
| regexp.rb:35:5:35:6 | \\W | W |
| regexp.rb:36:2:36:3 | \\s | s |
| regexp.rb:36:4:36:5 | \\S | S |
| regexp.rb:37:2:37:3 | \\d | d |
| regexp.rb:37:4:37:5 | \\D | D |
| regexp.rb:38:2:38:3 | \\h | h |
| regexp.rb:38:4:38:5 | \\H | H |
| regexp.rb:39:2:39:3 | \\n | \n |
| regexp.rb:39:4:39:5 | \\r | \r |
| regexp.rb:39:6:39:7 | \\t | \t |
| regexp.rb:42:4:42:6 | abc | abc |
| regexp.rb:43:4:43:5 | !a | !a |
| regexp.rb:46:3:46:5 | foo | foo |
| regexp.rb:46:8:46:10 | bar | bar |
| regexp.rb:47:2:47:3 | fo | fo |
| regexp.rb:47:5:47:5 | o | o |
| regexp.rb:47:7:47:7 | b | b |
| regexp.rb:47:9:47:10 | ar | ar |
| regexp.rb:48:3:48:3 | a | a |
| regexp.rb:48:5:48:5 | b | b |
| regexp.rb:48:7:48:8 | cd | cd |
| regexp.rb:48:10:48:10 | e | e |
| regexp.rb:49:5:49:5 | : | : |
| regexp.rb:49:8:49:9 | \\w | w |
| regexp.rb:52:8:52:9 | \\w | w |
| regexp.rb:53:9:53:9 | f | f |
| regexp.rb:53:10:53:10 | o | o |
| regexp.rb:56:3:56:3 | a | a |
| regexp.rb:56:6:56:6 | b | b |
| regexp.rb:57:9:57:9 | q | q |
| regexp.rb:57:12:57:13 | \\s | s |
| regexp.rb:63:3:63:3 | a | a |
| regexp.rb:63:5:63:5 | f | f |
| regexp.rb:72:3:72:3 | A | A |
| regexp.rb:72:5:72:5 | F | F |
| regexp.rb:72:15:72:15 | a | a |
| regexp.rb:72:17:72:17 | f | f |
| regexp.rb:79:2:79:4 | abc | abc |
| regexp.rb:82:2:82:7 | \\u{987 | \u0987 |

View File

@@ -0,0 +1,11 @@
import codeql.ruby.security.performance.RegExpTreeView
query predicate groupName(RegExpGroup g, string name) { name = g.getName() }
query predicate groupNumber(RegExpGroup g, int number) { number = g.getNumber() }
query predicate term(RegExpTerm term, string c) { c = term.getPrimaryQlClasses() }
query predicate regExpNormalCharValue(RegExpNormalChar term, string value) {
value = term.getValue()
}

View File

@@ -24,6 +24,7 @@
/[]]/ # MRI gives a warning, but accepts this as matching ']'
/[^]]/ # MRI gives a warning, but accepts this as matching anything except ']'
/[^-]/
/[|]/
# Nested character classes
/[[a-f]A-F]/ # BAD - not parsed correctly
@@ -75,4 +76,7 @@
# Simple constant interpolation
A = "a"
/#{A}bc/
/#{A}bc/
# unicode
/\u{9879}/

View File

@@ -29,12 +29,14 @@ definition
| nested_scopes.rb:30:16:30:19 | self (class << ...) | nested_scopes.rb:30:7:33:9 | self |
| nested_scopes.rb:31:11:31:16 | ... = ... | nested_scopes.rb:31:11:31:11 | a |
| nested_scopes.rb:40:1:40:18 | ... = ... | nested_scopes.rb:40:1:40:1 | d |
| parameters.rb:1:1:1:1 | self (parameters.rb) | parameters.rb:1:1:62:1 | self |
| parameters.rb:1:9:5:3 | <captured> | parameters.rb:1:1:62:1 | self |
| parameters.rb:1:14:1:14 | x | parameters.rb:1:14:1:14 | x |
| parameters.rb:2:4:2:8 | ... = ... | parameters.rb:1:18:1:18 | y |
| parameters.rb:7:1:13:3 | self (order_pizza) | parameters.rb:7:1:13:3 | self |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas |
| parameters.rb:15:1:19:3 | self (print_map) | parameters.rb:15:1:19:3 | self |
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map |
| parameters.rb:16:12:18:5 | <captured> | parameters.rb:15:1:19:3 | self |
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key |
@@ -110,6 +112,7 @@ definition
| ssa.rb:26:3:28:5 | <captured> | ssa.rb:25:1:30:3 | self |
| ssa.rb:26:3:28:5 | __synth__0__1 | ssa.rb:26:3:28:5 | __synth__0__1 |
| ssa.rb:26:3:28:5 | call to each | ssa.rb:26:7:26:10 | elem |
| ssa.rb:32:1:36:3 | self (m3) | ssa.rb:32:1:36:3 | self |
| ssa.rb:33:16:35:5 | <captured> | ssa.rb:32:1:36:3 | self |
| ssa.rb:33:20:33:20 | x | ssa.rb:33:20:33:20 | x |
| ssa.rb:38:1:42:3 | self (m4) | ssa.rb:38:1:42:3 | self |

View File

@@ -95,4 +95,5 @@
| tst.rb:375:11:375:27 | ([[:digit:]]\|\\d)+ | This part of the regular expression may cause exponential backtracking on strings starting with 'X' and containing many repetitions of '0'. |
| tst.rb:378:12:378:18 | (a\|\\w)* | This part of the regular expression may cause exponential backtracking on strings containing many repetitions of 'a'. |
| tst.rb:379:12:379:18 | (a\|\\w)* | This part of the regular expression may cause exponential backtracking on strings containing many repetitions of 'a'. |
| tst.rb:390:66:390:67 | .? | This part of the regular expression may cause exponential backtracking on strings containing many repetitions of '00\\\\'. |
| tst.rb:390:70:390:110 | (?:[a-zA-Z0-9_]\|%[a-fA-F0-9][a-fA-F0-9])+ | This part of the regular expression may cause exponential backtracking on strings containing many repetitions of '0'. |
| tst.rb:390:98:390:108 | [a-fA-F0-9] | This part of the regular expression may cause exponential backtracking on strings containing many repetitions of '0%0'. |