[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 028370d 054/271: Refactor to be more functional.
From: |
Jackson Ray Hamilton |
Subject: |
[elpa] master 028370d 054/271: Refactor to be more functional. |
Date: |
Thu, 05 Feb 2015 18:29:44 +0000 |
branch: master
commit 028370d4d4bfbd53fe6660960bbce62f560d1303
Author: Jackson Ray Hamilton <address@hidden>
Commit: Jackson Ray Hamilton <address@hidden>
Refactor to be more functional.
---
scopifier.js | 78 ++++++++++++++++++++++++++++++++--------------------------
1 files changed, 43 insertions(+), 35 deletions(-)
diff --git a/scopifier.js b/scopifier.js
index 3c20004..0f980c2 100644
--- a/scopifier.js
+++ b/scopifier.js
@@ -38,8 +38,11 @@ module.exports = function (code) {
}
analyzedScopes.forEach(function (scope) {
- var scopeDefinitions;
+ var scopeDefinitions,
+ variables,
+ globalReferences;
if (scope.level !== undefined) {
+ // Having its level set implies it was already annotated.
return;
}
if (scope.upper) {
@@ -51,56 +54,61 @@ module.exports = function (code) {
scope.level = scope.upper.level + 1;
}
} else {
+ // Base case.
scope.level = 0;
}
if (scope.functionExpressionScope) {
- // We've only given the scope a level for posterity's sake.
+ // We've only given the scope a level for posterity's sake. We're
+ // done now.
return;
}
- scopes.push([
+ scopes = scopes.concat([[
scope.level,
scope.block.range[0],
scope.block.range[1]
- ]);
+ ]]);
scopeDefinitions = [];
- scope.variables.forEach(function (variable) {
- var definitions = [],
- references = [];
- variable.defs.forEach(function (definition) {
- var range = definition.name.range;
- definitions.push([
- scope.level,
- range[0],
- range[1]
- ]);
- });
- variable.references.forEach(function (reference) {
- var range = reference.identifier.range;
- if (isDefined(definitions, range)) {
- return;
- }
- references.push([
- scope.level,
- range[0],
- range[1]
- ]);
- });
- Array.prototype.push.apply(scopeDefinitions, definitions);
- Array.prototype.push.apply(symbols, definitions);
- Array.prototype.push.apply(symbols, references);
- });
- scope.references.forEach(function (reference) {
+ variables = scope.variables.reduce(function (symbols, variable) {
+ var definitions,
+ references;
+ definitions = variable.defs
+ .map(function (definition) {
+ var range = definition.name.range;
+ return [
+ scope.level,
+ range[0],
+ range[1]
+ ];
+ });
+ references = variable.references
+ .reduce(function (references, reference) {
+ var range = reference.identifier.range;
+ if (isDefined(definitions, range)) {
+ return references;
+ }
+ // Double array required to concat just the inner array.
+ return references.concat([[
+ scope.level,
+ range[0],
+ range[1]
+ ]]);
+ }, []);
+ scopeDefinitions = scopeDefinitions.concat(definitions);
+ return symbols.concat(definitions).concat(references);
+ }, []);
+ globalReferences = scope.references.reduce(function (references,
reference) {
var range = reference.identifier.range;
if (reference.resolved || isDefined(scopeDefinitions, range)) {
- return;
+ return references;
}
// Handle global references.
- symbols.push([
+ return references.concat([[
0,
range[0],
range[1]
- ]);
- });
+ ]]);
+ }, []);
+ symbols = symbols.concat(variables).concat(globalReferences);
});
comments = ast.comments
- [elpa] master 615163a 045/271: Update screenshot., (continued)
- [elpa] master 615163a 045/271: Update screenshot., Jackson Ray Hamilton, 2015/02/05
- [elpa] master f4e075f 047/271: Readme updates., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 6cd2827 044/271: Cleanup old scopifier., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 2b8bc05 052/271: Remove buggy tail optimization. Move stdin cruft to cli., Jackson Ray Hamilton, 2015/02/05
- [elpa] master f75af43 036/271: Fix installation instructions., Jackson Ray Hamilton, 2015/02/05
- [elpa] master d881130 049/271: Rename test., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 40c9d93 048/271: Readme updates., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 348b4ca 056/271: Teeny., Jackson Ray Hamilton, 2015/02/05
- [elpa] master c9a7a2d 050/271: Add tail-end optimization., Jackson Ray Hamilton, 2015/02/05
- [elpa] master d2114ae 053/271: Remove indentation level., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 028370d 054/271: Refactor to be more functional.,
Jackson Ray Hamilton <=
- [elpa] master 0e64e85 055/271: Simplify to 2 arrays., Jackson Ray Hamilton, 2015/02/05
- [elpa] master ff988f3 051/271: Fix duplicate tokens and tail-end bug., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 0143a29 058/271: Leverage .jslintrc files., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 38f0821 059/271: Perf with ugly for loops., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 148e55b 046/271: Readme updates., Jackson Ray Hamilton, 2015/02/05
- [elpa] master a02fe9f 064/271: Switch to microoptimized., Jackson Ray Hamilton, 2015/02/05
- [elpa] master f07ce20 061/271: Revert back to functions., Jackson Ray Hamilton, 2015/02/05
- [elpa] master 0ab3ed5 060/271: And it still made no difference., Jackson Ray Hamilton, 2015/02/05
- [elpa] master c2114e9 040/271: Uglify tokenizer now working., Jackson Ray Hamilton, 2015/02/05
- [elpa] master b1e7a1d 076/271: Switch to 1-dimensional array., Jackson Ray Hamilton, 2015/02/05