add token module ignoring
This commit is contained in:
parent
f281a1e838
commit
e00809afa1
6
README
6
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.
|
||||
|
||||
|
@ -8,12 +8,14 @@ import ConstantTokenProcessor;
|
||||
class CodeParser {
|
||||
public var token_processors(get_token_processors, null) : Hash<TokenProcessor>;
|
||||
public var ignored_modules(get_ignored_modules, null) : Hash<Bool>;
|
||||
public var ignored_tokens_in_modules(get_ignored_tokens_in_modules, null) : Hash<Hash<Bool>>;
|
||||
|
||||
public static var processor_types = [ "FunctionTokenProcessor", "ConstantTokenProcessor" ];
|
||||
|
||||
public function new() {
|
||||
this.token_processors = new Hash<TokenProcessor>();
|
||||
this.ignored_modules = new Hash<Bool>();
|
||||
this.ignored_tokens_in_modules = new Hash<Hash<Bool>>();
|
||||
}
|
||||
|
||||
#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<Bool>());
|
||||
}
|
||||
|
||||
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);
|
||||
|
@ -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<Result>, ?ignored_modules : Hash<Bool>) {
|
||||
public function new(results : Array<Result>, ?ignored_modules : Hash<Bool>, ?ignored_tokens_in_modules : Hash<Hash<Bool>>) {
|
||||
var start_minimum_versions = new Hash<Array<String>>();
|
||||
var start_maximum_versions = new Hash<Array<String>>();
|
||||
|
||||
@ -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)) {
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user