From e00809afa1e364b3145c83b1d7a275563f2adc33 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 21 Oct 2008 07:06:28 -0400 Subject: [PATCH] add token module ignoring --- README | 6 ++++++ src/CodeParser.hx | 19 ++++++++++++++++++- src/CodeVersionInformation.hx | 10 +++++++++- src/TestCodeParser.hx | 6 ++++-- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/README b/README index 9488a4b..dcda894 100644 --- a/README +++ b/README @@ -47,6 +47,12 @@ the following in your code: //harmonious @maxdb +* To ignore the version information for a particular module for a + particular token (ex: the rename function of the zip module), place + at the top of the file the following: + + //harmonious @zip:rename + No build instructions for Windows yet, but Cygwin + haXe for Windows should be able to perform the build. diff --git a/src/CodeParser.hx b/src/CodeParser.hx index 98722f6..c4805d0 100644 --- a/src/CodeParser.hx +++ b/src/CodeParser.hx @@ -8,12 +8,14 @@ import ConstantTokenProcessor; class CodeParser { public var token_processors(get_token_processors, null) : Hash; public var ignored_modules(get_ignored_modules, null) : Hash; + public var ignored_tokens_in_modules(get_ignored_tokens_in_modules, null) : Hash>; public static var processor_types = [ "FunctionTokenProcessor", "ConstantTokenProcessor" ]; public function new() { this.token_processors = new Hash(); this.ignored_modules = new Hash(); + this.ignored_tokens_in_modules = new Hash>(); } #if neko @@ -38,6 +40,7 @@ class CodeParser { public function get_token_processors() { return this.token_processors; } public function get_ignored_modules() { return this.ignored_modules; } + public function get_ignored_tokens_in_modules() { return this.ignored_tokens_in_modules; } /** Flatten a list of hashes into a single hash. @@ -143,7 +146,21 @@ class CodeParser { for (token in new_tokens_to_ignore) { if (token.charAt(0) == "@") { if (token.toLowerCase() != "@php") { - this.ignored_modules.set(token.substr(1), true); + if (token.indexOf(":") != -1) { + var parts = token.split(":"); + var module = parts[0].substr(1); + var token = parts[1]; + + if (!this.ignored_tokens_in_modules.exists(module)) { + this.ignored_tokens_in_modules.set(token, new Hash()); + } + + var token_info = this.ignored_tokens_in_modules.get(token); + token_info.set(module, true); + this.ignored_tokens_in_modules.set(token, token_info); + } else { + this.ignored_modules.set(token.substr(1), true); + } } } else { tokens_to_ignore_hash.set(token, true); diff --git a/src/CodeVersionInformation.hx b/src/CodeVersionInformation.hx index fe7b2f6..ebef4c9 100644 --- a/src/CodeVersionInformation.hx +++ b/src/CodeVersionInformation.hx @@ -124,7 +124,7 @@ class CodeVersionInformation { Create a new CodeVersionInformation object based on the provided Result set and, optionally, while ignoring the provided modules. **/ - public function new(results : Array, ?ignored_modules : Hash) { + public function new(results : Array, ?ignored_modules : Hash, ?ignored_tokens_in_modules : Hash>) { var start_minimum_versions = new Hash>(); var start_maximum_versions = new Hash>(); @@ -142,6 +142,14 @@ class CodeVersionInformation { if (ignored_modules != null) { ok_to_use = !ignored_modules.exists(source); } + if (ok_to_use) { + if (ignored_tokens_in_modules != null) { + if (ignored_tokens_in_modules.exists(result.token)) { + var token_info = ignored_tokens_in_modules.get(result.token); + ok_to_use = !token_info.exists(source); + } + } + } if (ok_to_use) { if (!internal_minimum_version.exists(source)) { diff --git a/src/TestCodeParser.hx b/src/TestCodeParser.hx index d96bca4..9402334 100644 --- a/src/TestCodeParser.hx +++ b/src/TestCodeParser.hx @@ -8,7 +8,8 @@ class TestCodeParser extends haxe.unit.TestCase { [ "//harmonious json_encode\narray_shift() json_encode()\n//harmonious_end\njson_encode()", "2", "{minimum => {PHP => 5.2.0, json => 1.2.0}, maximum => {}}" ], [ "//harmonious @json\narray_shift() json_encode()\n//harmonious_end\njson_encode()", "2", "{minimum => {PHP => 5.2.0}, maximum => {}}" ], [ "//harmonious @PHP\narray_shift()", "1", "{minimum => {PHP => 4}, maximum => {}}" ], - [ "PATHINFO_BASENAME", "1", "{minimum => {PHP => 4}, maximum => {}}" ] + [ "PATHINFO_BASENAME", "1", "{minimum => {PHP => 4}, maximum => {}}" ], + [ "//harmonious @zip:rename\nrename()", "1", "{minimum => {PHP => 4}, maximum => {}}" ] ]; #if neko @@ -26,8 +27,9 @@ class TestCodeParser extends haxe.unit.TestCase { for (code in test_code) { var result = p.parse(code[0]); var ignored_modules = p.ignored_modules; + var ignored_tokens_in_modules = p.ignored_tokens_in_modules; assertEquals(Std.parseInt(code[1]), result.length); - var code_version_info = new CodeVersionInformation(result, ignored_modules); + var code_version_info = new CodeVersionInformation(result, ignored_modules, ignored_tokens_in_modules); assertEquals(code[2], code_version_info.final_versions.toString()); } }