Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
6886913f
Commit
6886913f
authored
8 years ago
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #2670 from bas-vk/indent
Ignore round and curly brackets in strings for indentation level
parents
c75d3b0e
dbcdf83e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
91 additions
and
2 deletions
+91
-2
console.go
console/console.go
+45
-2
console_test.go
console/console_test.go
+46
-0
No files found.
console/console.go
View file @
6886913f
...
...
@@ -331,11 +331,11 @@ func (c *Console) Interactive() {
// Append the line to the input and check for multi-line interpretation
input
+=
line
+
"
\n
"
indents
=
strings
.
Count
(
input
,
"{"
)
+
strings
.
Count
(
input
,
"("
)
-
strings
.
Count
(
input
,
"}"
)
-
strings
.
Count
(
input
,
")"
)
indents
=
countIndents
(
input
)
if
indents
<=
0
{
prompt
=
c
.
prompt
}
else
{
prompt
=
strings
.
Repeat
(
".
."
,
indents
*
2
)
+
" "
prompt
=
strings
.
Repeat
(
".
"
,
indents
*
3
)
+
" "
}
// If all the needed lines are present, save the command and run
if
indents
<=
0
{
...
...
@@ -354,6 +354,49 @@ func (c *Console) Interactive() {
}
}
// countIndents returns the number of identations for the given input.
// In case of invalid input such as var a = } the result can be negative.
func
countIndents
(
input
string
)
int
{
var
(
indents
=
0
inString
=
false
strOpenChar
=
' '
// keep track of the string open char to allow var str = "I'm ....";
charEscaped
=
false
// keep track if the previous char was the '\' char, allow var str = "abc\"def";
)
for
_
,
c
:=
range
input
{
switch
c
{
case
'\\'
:
// indicate next char as escaped when in string and previous char isn't escaping this backslash
if
!
charEscaped
&&
inString
{
charEscaped
=
true
}
case
'\'
'
,
'"'
:
if
inString
&&
!
charEscaped
&&
strOpenChar
==
c
{
// end string
inString
=
false
}
else
if
!
inString
&&
!
charEscaped
{
// begin string
inString
=
true
strOpenChar
=
c
}
charEscaped
=
false
case
'{'
,
'('
:
if
!
inString
{
// ignore brackets when in string, allow var str = "a{"; without indenting
indents
++
}
charEscaped
=
false
case
'}'
,
')'
:
if
!
inString
{
indents
--
}
charEscaped
=
false
default
:
charEscaped
=
false
}
}
return
indents
}
// Execute runs the JavaScript file specified as the argument.
func
(
c
*
Console
)
Execute
(
path
string
)
error
{
return
c
.
jsre
.
Exec
(
path
)
...
...
This diff is collapsed.
Click to expand it.
console/console_test.go
View file @
6886913f
...
...
@@ -294,3 +294,49 @@ func TestPrettyError(t *testing.T) {
t
.
Fatalf
(
"pretty error mismatch: have %s, want %s"
,
output
,
want
)
}
}
// Tests that tests if the number of indents for JS input is calculated correct.
func
TestIndenting
(
t
*
testing
.
T
)
{
testCases
:=
[]
struct
{
input
string
expectedIndentCount
int
}{
{
`var a = 1;`
,
0
},
{
`"some string"`
,
0
},
{
`"some string with (parentesis`
,
0
},
{
`"some string with newline
("`
,
0
},
{
`function v(a,b) {}`
,
0
},
{
`function f(a,b) { var str = "asd("; };`
,
0
},
{
`function f(a) {`
,
1
},
{
`function f(a, function(b) {`
,
2
},
{
`function f(a, function(b) {
var str = "a)}";
});`
,
0
},
{
`function f(a,b) {
var str = "a{b(" + a, ", " + b;
}`
,
0
},
{
`var str = "\"{"`
,
0
},
{
`var str = "'("`
,
0
},
{
`var str = "\\{"`
,
0
},
{
`var str = "\\\\{"`
,
0
},
{
`var str = 'a"{`
,
0
},
{
`var obj = {`
,
1
},
{
`var obj = { {a:1`
,
2
},
{
`var obj = { {a:1}`
,
1
},
{
`var obj = { {a:1}, b:2}`
,
0
},
{
`var obj = {}`
,
0
},
{
`var obj = {
a: 1, b: 2
}`
,
0
},
{
`var test = }`
,
-
1
},
{
`var str = "a\""; var obj = {`
,
1
},
}
for
i
,
tt
:=
range
testCases
{
counted
:=
countIndents
(
tt
.
input
)
if
counted
!=
tt
.
expectedIndentCount
{
t
.
Errorf
(
"test %d: invalid indenting: have %d, want %d"
,
i
,
counted
,
tt
.
expectedIndentCount
)
}
}
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment