[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. |