use of com.github._1c_syntax.bsl.parser.SDBLTokenizer in project bsl-language-server by 1c-syntax.
the class QueryComputer method visitString.
@Override
public ParseTree visitString(BSLParser.StringContext ctx) {
// проверка на минимальную длину
if (ctx.getText().length() < MINIMAL_QUERY_STRING_LENGTH) {
return ctx;
}
int startLine = 0;
var startEmptyLines = "";
if (!ctx.getTokens().isEmpty()) {
startLine = ctx.getTokens().get(0).getLine();
startEmptyLines = "\n".repeat(startLine - 1);
}
boolean isQuery = false;
// конкатенация строк в одну
int prevTokenLine = -1;
String partString = "";
var strings = new StringJoiner("\n");
for (Token token : ctx.getTokens()) {
// добавляем часть строки только в случае находления ее на другой строке файла
if (token.getLine() != prevTokenLine && prevTokenLine != -1) {
strings.add(partString);
partString = "";
}
// если новый токен строки находится на той же строке файла, что и предыдущий, то добавляем его к ней
if (token.getLine() == prevTokenLine && prevTokenLine != -1) {
String newString = getString(startLine, token);
partString = newString.substring(partString.length());
} else {
partString = getString(startLine, token);
}
// проверяем подстроку на вероятность запроса
if (!isQuery) {
isQuery = QUERIES_ROOT_KEY.matcher(partString).find() && !NON_QUERIES_START.matcher(partString).find();
}
startLine = token.getLine();
prevTokenLine = token.getLine();
}
// последнюю часть тоже необходимо добавить к общему тексту
if (!partString.isEmpty()) {
strings.add(partString);
}
if (isQuery) {
queries.add(new SDBLTokenizer(startEmptyLines + removeDoubleQuotes(strings.toString())));
}
return ctx;
}
use of com.github._1c_syntax.bsl.parser.SDBLTokenizer in project bsl-language-server by 1c-syntax.
the class DocumentContextLazyDataMeasurer method handleEvent.
/**
* Обработчик события {@link DocumentContextContentChangedEvent}. Вызывает основную логику выполнения замеров.
*
* @param event Событие
*/
@EventListener
@Order
@SneakyThrows
public void handleEvent(DocumentContextContentChangedEvent event) {
var documentContext = event.getSource();
LOGGER.debug("Take measurements for {}", documentContext.getUri());
measureCollector.measureIt(documentContext::getAst, "context: ast");
measureCollector.measureIt(documentContext::getQueries, "context: queries");
for (SDBLTokenizer sdblTokenizer : documentContext.getQueries()) {
measureCollector.measureIt(sdblTokenizer::getAst, "context: queryAst");
}
measureCollector.measureIt(documentContext::getSymbolTree, "context: symbolTree");
measureCollector.measureIt(documentContext::getDiagnosticIgnorance, "context: diagnosticIgnorance");
measureCollector.measureIt(documentContext::getCognitiveComplexityData, "context: cognitiveComplexity");
measureCollector.measureIt(documentContext::getCyclomaticComplexityData, "context: cyclomaticComplexity");
measureCollector.measureIt(documentContext::getMetrics, "context: metrics");
}
Aggregations