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
6ba7bbbe
Commit
6ba7bbbe
authored
9 years ago
by
Felix Lange
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
jsre: include constructor properties in auto-completion
parent
ae5bc89c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
107 additions
and
14 deletions
+107
-14
completion.go
jsre/completion.go
+5
-5
completion_test.go
jsre/completion_test.go
+83
-0
pretty.go
jsre/pretty.go
+19
-9
No files found.
jsre/completion.go
View file @
6ba7bbbe
...
...
@@ -40,11 +40,11 @@ func getCompletions(vm *otto.Otto, line string) (results []string) {
prefix
=
parts
[
len
(
parts
)
-
1
]
}
res
,
err
:=
vm
.
Eval
(
objRef
)
if
err
!=
nil
||
!
res
.
IsObject
()
{
obj
,
_
:=
vm
.
Object
(
objRef
)
if
obj
==
nil
{
return
nil
}
for
_
,
k
:=
range
res
.
Object
()
.
Keys
(
)
{
iterOwnAndConstructorKeys
(
vm
,
obj
,
func
(
k
string
)
{
if
strings
.
HasPrefix
(
k
,
prefix
)
{
if
objRef
==
"this"
{
results
=
append
(
results
,
k
)
...
...
@@ -52,9 +52,9 @@ func getCompletions(vm *otto.Otto, line string) (results []string) {
results
=
append
(
results
,
strings
.
Join
(
parts
[
:
len
(
parts
)
-
1
],
"."
)
+
"."
+
k
)
}
}
}
}
)
// e.g. web3<tab><tab> append dot since its an object
if
lineRes
,
_
:=
vm
.
Eval
(
line
);
lineRes
.
IsObject
()
{
if
obj
,
_
=
vm
.
Object
(
line
);
obj
!=
nil
{
results
=
append
(
results
,
line
+
"."
)
}
...
...
This diff is collapsed.
Click to expand it.
jsre/completion_test.go
0 → 100644
View file @
6ba7bbbe
// Copyright 2015 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package
jsre
import
(
"reflect"
"testing"
)
func
TestCompleteKeywords
(
t
*
testing
.
T
)
{
re
:=
New
(
""
)
re
.
Run
(
`
function theClass() {
this.foo = 3;
this.gazonk = {xyz: 4};
}
theClass.prototype.someMethod = function () {};
var x = new theClass();
var y = new theClass();
y.someMethod = function override() {};
`
)
var
tests
=
[]
struct
{
input
string
want
[]
string
}{
{
input
:
"x"
,
want
:
[]
string
{
"x"
,
"x."
},
},
{
input
:
"x."
,
want
:
[]
string
{
"x.constructor"
,
"x.foo"
,
"x.gazonk"
,
"x.someMethod"
,
},
},
{
input
:
"y."
,
want
:
[]
string
{
"y.constructor"
,
"y.foo"
,
"y.gazonk"
,
"y.someMethod"
,
},
},
{
input
:
"x.gazonk."
,
want
:
[]
string
{
"x.gazonk.constructor"
,
"x.gazonk.hasOwnProperty"
,
"x.gazonk.isPrototypeOf"
,
"x.gazonk.propertyIsEnumerable"
,
"x.gazonk.toLocaleString"
,
"x.gazonk.toString"
,
"x.gazonk.valueOf"
,
"x.gazonk.xyz"
,
},
},
}
for
_
,
test
:=
range
tests
{
cs
:=
re
.
CompleteKeywords
(
test
.
input
)
if
!
reflect
.
DeepEqual
(
cs
,
test
.
want
)
{
t
.
Errorf
(
"wrong completions for %q
\n
got %v
\n
want %v"
,
test
.
input
,
cs
,
test
.
want
)
}
}
}
This diff is collapsed.
Click to expand it.
jsre/pretty.go
View file @
6ba7bbbe
...
...
@@ -187,20 +187,30 @@ func (ctx ppctx) fields(obj *otto.Object) []string {
vals
=
append
(
vals
,
k
)
}
}
// add own properties
ctx
.
doOwnProperties
(
obj
.
Value
(),
add
)
// add properties of the constructor
if
cp
:=
constructorPrototype
(
obj
);
cp
!=
nil
{
ctx
.
doOwnProperties
(
cp
.
Value
(),
add
)
}
iterOwnAndConstructorKeys
(
ctx
.
vm
,
obj
,
add
)
sort
.
Strings
(
vals
)
sort
.
Strings
(
methods
)
return
append
(
vals
,
methods
...
)
}
func
(
ctx
ppctx
)
doOwnProperties
(
v
otto
.
Value
,
f
func
(
string
))
{
Object
,
_
:=
ctx
.
vm
.
Object
(
"Object"
)
rv
,
_
:=
Object
.
Call
(
"getOwnPropertyNames"
,
v
)
func
iterOwnAndConstructorKeys
(
vm
*
otto
.
Otto
,
obj
*
otto
.
Object
,
f
func
(
string
))
{
seen
:=
make
(
map
[
string
]
bool
)
iterOwnKeys
(
vm
,
obj
,
func
(
prop
string
)
{
seen
[
prop
]
=
true
f
(
prop
)
})
if
cp
:=
constructorPrototype
(
obj
);
cp
!=
nil
{
iterOwnKeys
(
vm
,
cp
,
func
(
prop
string
)
{
if
!
seen
[
prop
]
{
f
(
prop
)
}
})
}
}
func
iterOwnKeys
(
vm
*
otto
.
Otto
,
obj
*
otto
.
Object
,
f
func
(
string
))
{
Object
,
_
:=
vm
.
Object
(
"Object"
)
rv
,
_
:=
Object
.
Call
(
"getOwnPropertyNames"
,
obj
.
Value
())
gv
,
_
:=
rv
.
Export
()
switch
gv
:=
gv
.
(
type
)
{
case
[]
interface
{}
:
...
...
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