59 lines
2.4 KiB
JavaScript
59 lines
2.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.docstringIsClosed = void 0;
|
|
const utilities_1 = require("./utilities");
|
|
function docstringIsClosed(document, linePosition, charPosition, quoteStyle) {
|
|
const lines = document.split("\n");
|
|
if (quotesCloseExistingDocstring(lines, linePosition, charPosition, quoteStyle)) {
|
|
return true;
|
|
}
|
|
if (quotesOpenExistingDocstring(lines, linePosition, charPosition, quoteStyle)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
exports.docstringIsClosed = docstringIsClosed;
|
|
function quotesCloseExistingDocstring(lines, linePosition, charPosition, quoteStyle) {
|
|
const linesBeforePosition = sliceUpToPosition(lines, linePosition, charPosition);
|
|
let numberOfTripleQuotes = 0;
|
|
for (const line of linesBeforePosition.reverse()) {
|
|
if (line.includes("def ") || line.includes("class ")) {
|
|
break;
|
|
}
|
|
numberOfTripleQuotes += occurrences(line, quoteStyle);
|
|
}
|
|
return numberOfTripleQuotes % 2 === 0;
|
|
}
|
|
function quotesOpenExistingDocstring(lines, linePosition, charPosition, quoteStyle) {
|
|
const linesAfterPosition = sliceFromPosition(lines, linePosition, charPosition);
|
|
const originalIndentation = (0, utilities_1.indentationOf)(lines[linePosition]);
|
|
// Need to check first line separately because indentation was sliced off
|
|
if (linesAfterPosition[0].includes(quoteStyle)) {
|
|
return true;
|
|
}
|
|
for (const line of linesAfterPosition.slice(1)) {
|
|
if (line.includes(quoteStyle)) {
|
|
return true;
|
|
}
|
|
if ((!(0, utilities_1.blankLine)(line) && (0, utilities_1.indentationOf)(line) < originalIndentation) ||
|
|
line.includes("def ") ||
|
|
line.includes("class ")) {
|
|
return false;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
function sliceUpToPosition(lines, linePosition, charPosition) {
|
|
const slicedDocument = lines.slice(0, linePosition);
|
|
slicedDocument.push(lines[linePosition].slice(0, charPosition));
|
|
return slicedDocument;
|
|
}
|
|
function sliceFromPosition(lines, linePosition, charPosition) {
|
|
let slicedDocument = [lines[linePosition].slice(charPosition)];
|
|
slicedDocument = slicedDocument.concat(lines.slice(linePosition + 1));
|
|
return slicedDocument;
|
|
}
|
|
function occurrences(str, word) {
|
|
return str.split(word).length - 1;
|
|
}
|
|
//# sourceMappingURL=docstring_is_closed.js.map
|