fixed PY-2977 "Code Compatibility" false positives. updated versions.xml for Compatibility Visitor.

This commit is contained in:
Ekaterina Tuzova
2011-02-24 14:15:18 +03:00
parent 17b0dbb7c8
commit bb20713830
3 changed files with 20 additions and 35 deletions
+11 -1
View File
@@ -1,9 +1,12 @@
__author__ = 'catherine'
import urllib2
import datetime
from BeautifulSoup import BeautifulSoup
from xml.dom import minidom
exclude = ['StringIO', 'cStringIO']
def get_address(version):
return "http://docs.python.org/release/" + str(version) + "/modindex.html"
@@ -68,6 +71,8 @@ def get_functions_from_page(link, module):
tt = None
if tt is not None:
func = str(tt.text)
if func in exclude or (module[0] + "." + func) in exclude:
continue
if func.startswith(module[0] + "."):
functions.add(func)
else:
@@ -114,13 +119,17 @@ all_versions = (2.4, 2.5, 2.6, 2.7, 3.0, 3.1)
all_functions = set()
root_elem = doc.createElement("root")
print ("Start searching for all functions")
for version in all_versions:
print ("version " + str(version) + " started at " + str(datetime.datetime.now()))
supported = get_supported_functions(version)
all_functions = all_functions.union(supported)
builtins = get_builtins(version)
all_functions = all_functions.union(builtins)
print ("Start searching unsupported functions")
for version in all_versions:
print ("version " + str(version) + " started at " + str(datetime.datetime.now()))
version_elem = doc.createElement("python")
version_elem.setAttribute('version', str(version))
supported = get_supported_functions(version)
@@ -143,8 +152,9 @@ for version in all_versions:
version_elem.appendChild(elem)
root_elem.appendChild(version_elem)
doc.appendChild(root_elem)
doc.appendChild(root_elem)
print ("Versions processing finished at " + str(datetime.datetime.now()))
file_handler = open("versions.xml", 'w')
doc.writexml(file_handler)
file_handler.close()
File diff suppressed because one or more lines are too long
@@ -116,18 +116,9 @@ public abstract class CompatibilityVisitor extends PyAnnotator {
for (PyImportElement importElement : importElements) {
final PyQualifiedName qName = importElement.getImportedQName();
if (qName != null) {
if (!languageLevel.isPy3K()) {
if (qName.matches("builtins")) {
len = appendLanguageLevel(message, len, languageLevel);
moduleName = "builtins";
}
}
else {
if (qName.matches("__builtin__")) {
len = appendLanguageLevel(message, len, languageLevel);
moduleName = "__builtin__";
}
}
moduleName = qName.toString();
if (UnsupportedFeaturesUtil.MODULES.get(languageLevel).contains(moduleName))
len = appendLanguageLevel(message, len, languageLevel);
}
}
}
@@ -449,33 +440,17 @@ public abstract class CompatibilityVisitor extends PyAnnotator {
}
}
}
else {
if (!name.equals("print") && UnsupportedFeaturesUtil.BUILTINS.get(languageLevel).contains(name)) {
len = appendLanguageLevel(message, len, languageLevel);
}
}
//else {
// if (!name.equals("print") && UnsupportedFeaturesUtil.BUILTINS.get(languageLevel).contains(name)) {
// len = appendLanguageLevel(message, len, languageLevel);
// }
//}
}
}
commonRegisterProblem(message, " not have method " + node.getCallee().getText(),
len, node, null, false);
}
@Override
public void visitPyImportElement(PyImportElement node) {
super.visitPyImportElement(node);
int len = 0;
StringBuilder message = new StringBuilder(myCommonMessage);
for (int i = 0; i != myVersionsToProcess.size(); ++i) {
LanguageLevel languageLevel = myVersionsToProcess.get(i);
if (UnsupportedFeaturesUtil.MODULES.get(languageLevel).contains(node.getText()) &&
!node.getText().equals("__builtin__") && !node.getText().equals("builtins")) {
len = appendLanguageLevel(message, len, languageLevel);
}
}
commonRegisterProblem(message, " not have module " + node.getText(), len, node, null, false);
}
protected abstract void registerProblem(PsiElement node, String s, LocalQuickFix localQuickFix, boolean asError);
protected void registerProblem(PsiElement node, String s, LocalQuickFix localQuickFix) {