diff options
author | Mike Rennie <Michael_Rennie@ca.ibm.com> | 2016-11-17 13:39:19 -0500 |
---|---|---|
committer | Mike Rennie <Michael_Rennie@ca.ibm.com> | 2016-11-17 13:39:19 -0500 |
commit | e94e8d11b71c9781d509faa82f57b7d991fc09bd (patch) | |
tree | 7bbee3aa956d746240a50fad6e71be55c6eb8d79 | |
parent | 8c58044077e210c4824f3fe82ebba1fbeb141744 (diff) | |
download | org.eclipse.orion.client-e94e8d11b71c9781d509faa82f57b7d991fc09bd.zip org.eclipse.orion.client-e94e8d11b71c9781d509faa82f57b7d991fc09bd.tar.gz org.eclipse.orion.client-e94e8d11b71c9781d509faa82f57b7d991fc09bd.tar.bz2 |
Bug 506987 - JavaScript outline does not show class methods correctly (improper handling of MethodDefinition nodes)
-rw-r--r-- | bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/outliner.js | 18 | ||||
-rw-r--r-- | bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/es6OutlinerTests.js | 20 |
2 files changed, 36 insertions, 2 deletions
diff --git a/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/outliner.js b/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/outliner.js index f90d49b..8ab3d4c 100644 --- a/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/outliner.js +++ b/bundles/org.eclipse.orion.client.javascript/web/javascript/ternPlugins/outliner.js @@ -92,6 +92,7 @@ define([ if(item) {
scope.push(item);
}
+ node.value.md = true; //tag the function expression to know to skip
delete node.sig;
break;
}
@@ -103,6 +104,10 @@ define([ break;
}
case Estraverse.Syntax.FunctionExpression: {
+ if(node.md) {
+ delete node.sig;
+ break;
+ }
item = addElement(Signatures.computeSignature(node));
if(item) {
scope.push(item);
@@ -179,12 +184,21 @@ define([ switch(node.type) {
case Estraverse.Syntax.ObjectExpression :
case Estraverse.Syntax.FunctionDeclaration :
- case Estraverse.Syntax.FunctionExpression :
case Estraverse.Syntax.ClassDeclaration :
case Estraverse.Syntax.ClassExpression :
case Estraverse.Syntax.MethodDefinition :
- case Estraverse.Syntax.ArrowFunctionExpression :
+ case Estraverse.Syntax.ArrowFunctionExpression : {
+ scope.pop();
+ break;
+ }
+ case Estraverse.Syntax.FunctionExpression : {
+ if(node.md) {
+ delete node.md;
+ break;
+ }
scope.pop();
+ break;
+ }
}
}
});
diff --git a/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/es6OutlinerTests.js b/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/es6OutlinerTests.js index 274494a..6d3f536 100644 --- a/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/es6OutlinerTests.js +++ b/bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/es6OutlinerTests.js @@ -191,6 +191,26 @@ define([ }
});
});
+ /**
+ * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=506987
+ */
+ it('test method definitions 1', function(callback) {
+ var r = setup(callback, "class C {f() {return {};}}");
+ r.outliner.computeOutline(r.editorContext).then(function(outline) {
+ try {
+ if(!outline || outline.length < 1) {
+ assert.fail("There should be one outline element");
+ }
+ assertElement(outline[0], "class C", 6, 7);
+ assertElement(outline[0].children[0], "f()", 9, 25);
+ assertElement(outline[0].children[0].children[0], "return {...}", 14, 20);
+ callback();
+ }
+ catch(err) {
+ callback(err);
+ }
+ });
+ });
});
};
});
\ No newline at end of file |