summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Rennie <Michael_Rennie@ca.ibm.com>2016-11-17 13:39:19 -0500
committerMike Rennie <Michael_Rennie@ca.ibm.com>2016-11-17 13:39:19 -0500
commite94e8d11b71c9781d509faa82f57b7d991fc09bd (patch)
tree7bbee3aa956d746240a50fad6e71be55c6eb8d79
parent8c58044077e210c4824f3fe82ebba1fbeb141744 (diff)
downloadorg.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.js18
-rw-r--r--bundles/org.eclipse.orion.client.javascript/web/js-tests/javascript/es6OutlinerTests.js20
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