mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Support multiline requirements in requirements.txt parsing
This commit is contained in:
@@ -335,10 +335,8 @@ public class PyRequirement {
|
||||
visitedFiles.add(containingFile);
|
||||
}
|
||||
|
||||
return Arrays
|
||||
.stream(StringUtil.splitByLines(text))
|
||||
.map(String::trim)
|
||||
.filter(line -> !line.isEmpty())
|
||||
return splitByLinesAndCollapse(text)
|
||||
.stream()
|
||||
.map(line -> parseLine(line, containingFile, visitedFiles))
|
||||
.flatMap(Collection::stream)
|
||||
.filter(req -> req != null)
|
||||
@@ -414,6 +412,30 @@ public class PyRequirement {
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<String> splitByLinesAndCollapse(@NotNull String text) {
|
||||
final List<String> result = new ArrayList<>();
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (String line : StringUtil.splitByLines(text)) {
|
||||
if (line.endsWith("\\") && !line.endsWith("\\\\")) {
|
||||
sb.append(line.substring(0, line.length() - 1));
|
||||
} else {
|
||||
if (sb.length() == 0) {
|
||||
result.add(line);
|
||||
} else {
|
||||
sb.append(line);
|
||||
|
||||
result.add(sb.toString());
|
||||
|
||||
sb.setLength(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<PyRequirement> parseLine(@NotNull String line,
|
||||
@Nullable VirtualFile containingFile,
|
||||
|
||||
Reference in New Issue
Block a user