[javascriptlint-commit] SF.net SVN: javascriptlint:[299] trunk
Status: Beta
Brought to you by:
matthiasmiller
|
From: <mat...@us...> - 2010-04-23 20:58:18
|
Revision: 299
http://javascriptlint.svn.sourceforge.net/javascriptlint/?rev=299&view=rev
Author: matthiasmiller
Date: 2010-04-23 20:58:11 +0000 (Fri, 23 Apr 2010)
Log Message:
-----------
Add /*jsl:unused <identifier>*/ control comment.
Modified Paths:
--------------
trunk/javascriptlint/lint.py
trunk/tests/warnings/unreferenced_identifier.js
Modified: trunk/javascriptlint/lint.py
===================================================================
--- trunk/javascriptlint/lint.py 2010-04-23 20:38:04 UTC (rev 298)
+++ trunk/javascriptlint/lint.py 2010-04-23 20:58:11 UTC (rev 299)
@@ -61,7 +61,8 @@
'import': (True),
'fallthru': (False),
'pass': (False),
- 'declare': (True)
+ 'declare': (True),
+ 'unused': (True),
}
if control_comment.lower() in control_comments:
keyword = control_comment.lower()
@@ -82,6 +83,7 @@
self._kids = []
self._identifiers = {}
self._references = []
+ self._unused = []
self._node = None
def add_scope(self, node):
assert not node is None
@@ -98,6 +100,8 @@
}
def add_reference(self, name, node):
self._references.append((name, node))
+ def set_unused(self, name, node):
+ self._unused.append((name, node))
def get_identifier(self, name):
if name in self._identifiers:
return self._identifiers[name]['node']
@@ -183,6 +187,14 @@
if not is_in_with_scope:
undeclared.append((self, name, node))
+ # Remove all variables that have been set as "unused".
+ for name, node in self._unused:
+ resolved = self.resolve_identifier(name)
+ if resolved:
+ unreferenced.pop((resolved[0], name), None)
+ else:
+ undeclared.append((self, name, node))
+
for child in self._kids:
child._find_warnings(unreferenced, undeclared, obstructive,
is_in_with_scope)
@@ -355,6 +367,7 @@
parse_errors = []
declares = []
+ unused_identifiers = []
import_paths = []
fallthrus = []
passes = []
@@ -380,6 +393,11 @@
report(node, 'jsl_cc_not_understood')
else:
declares.append((parms, node))
+ elif keyword == 'unused':
+ if not util.isidentifier(parms):
+ report(node, 'jsl_cc_not_understood')
+ else:
+ unused_identifiers.append((parms, node))
elif keyword == 'ignore':
if start_ignore:
report(node, 'mismatch_ctrl_comments')
@@ -449,6 +467,10 @@
declare_scope = script_cache.scope.find_scope(node)
_warn_or_declare(declare_scope, name, 'var', node, report)
+ for name, node in unused_identifiers:
+ unused_scope = script_cache.scope.find_scope(node)
+ unused_scope.set_unused(name, node)
+
def _lint_script_parts(script_parts, script_cache, lint_error, conf, import_callback):
def report_lint(node, errname, pos=None, **errargs):
errdesc = warnings.format_error(errname, **errargs)
Modified: trunk/tests/warnings/unreferenced_identifier.js
===================================================================
--- trunk/tests/warnings/unreferenced_identifier.js 2010-04-23 20:38:04 UTC (rev 298)
+++ trunk/tests/warnings/unreferenced_identifier.js 2010-04-23 20:58:11 UTC (rev 299)
@@ -84,5 +84,19 @@
return parm;
};
}
+
+ function test_unused(parm) { /*warning:unreferenced_function*/
+ /*jsl:unused parm*/
+ /*jsl:unused bogus_outer*/ /*warning:undeclared_identifier*/
+
+ var unused_var;
+ /*jsl:unused unused_var*/
+
+ with (parm) { /*warning:with_statement*/
+ /*jsl:unused bogus_inner*/ /*warning:undeclared_identifier*/
+ x = 42;
+ }
+ }
+
return get_callback(42);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|