Skip to content
Extraits de code Groupes Projets
Valider 3d333f1c rédigé par Mireille COILHAC's avatar Mireille COILHAC
Parcourir les fichiers

Merge branch '10-mise-a-jour-vers-pyodide-0-9-1' into 'main'

Resolve "Mise à jour vers Pyodide 0.9.1"

Closes #10

See merge request modeles-projets/mkdocs-pyodide-review!27
parents 80586180 1cf08757
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -408,6 +408,7 @@ def define_env(env):
mode: str = "",
MAX: Union[int, Literal["+"]] = 5,
SANS: str = "",
SIZE: int = 30,
) -> str:
"""
@brief : Create an IDE (Editor+Terminal) within an Mkdocs document. {script_name}.py is loaded on the editor if present.
......@@ -438,6 +439,7 @@ def define_env(env):
{
"class": "py_mk_ide",
"data-max": f"{allowed_number_of_attempts}",
"data-max_size": f"{SIZE}",
"data-exclude": f'{"eval,exec" + format_excluded_instructions(SANS)}',
},
)
......
......@@ -83,7 +83,7 @@ $("[id^=editor_]").each(function () {
var exerciseCode =
`Missing ${tagHdr} tag. Please check !\n\n` + exerciseFileContent;
} else {
let headerCode = matchResults[1];
let _ = matchResults[1];
var exerciseCode = matchResults[2];
let newline = "bksl-nl";
while (exerciseCode.startsWith(newline)) {
......@@ -94,10 +94,11 @@ $("[id^=editor_]").each(function () {
var exerciseCode = exerciseFileContent;
}
exerciseCode = exerciseCode
.replace(/bksl-nl/g, "\n")
.replace(/py-und/g, "_")
.replace(/py-str/g, "*");
exerciseCode = restoreEscapedCharacters(exerciseCode);
let ideMaximumSize = document.getElementById(this.id).parentElement
.parentElement.dataset.max_size;
console.log(this.id, ideMaximumSize);
let idEditor = "editor_" + number;
function createACE(idEditor) {
......@@ -106,7 +107,7 @@ $("[id^=editor_]").each(function () {
theme: createTheme(),
mode: "ace/mode/python",
autoScrollEditorIntoView: true,
maxLines: 30,
maxLines: ideMaximumSize,
minLines: 6,
tabSize: 4,
printMargin: false, // hide ugly margins...
......@@ -117,12 +118,12 @@ $("[id^=editor_]").each(function () {
enableSnippets: true,
enableLiveAutocompletion: false,
});
// editor.commands.bindKey({win: 'Tab', mac: 'Tab'}, 'startAutocomplete')
editor.commands.bindKey(
{ win: "Alt-Tab", mac: "Alt-Tab" },
"startAutocomplete"
);
editor.getSession().setValue(exerciseCode);
editor.resize();
editor.commands.addCommand({
name: "commentTests",
bindKey: { win: "Ctrl-I", mac: "Cmd-I" },
......
Ce diff est replié.
function richTextFormat(content, style, color = "", background = "") {
return `[[${style};${color};${background}]${content}]`;
}
let error = (content) => richTextFormat(content, "b", "red");
let warning = (content) => richTextFormat(content, "", "orange");
let stress = (content) => richTextFormat(content, "b");
let info = (content) => richTextFormat(content, "", "grey");
let italic = (content) => richTextFormat(content, "i");
let errorMessage = (errorType, lineNumber, log) => {
return ` Python a renvoyé une ${error(
errorType
)} à la ligne ${lineNumber} :\n\n ${italic(log)}`;
};
let runScriptPrompt = info("%Script exécuté");
let ps1 = ">>> ";
let ps2 = "... ";
function countParenthesis(string, separator = "(") {
const matching_separator = { "(": ")", "[": "]", "{": "}" };
let countChar = (str, c) => str.split(c).length - 1;
return (
countChar(string, separator) -
countChar(string, matching_separator[separator])
);
}
function removeRecursionWrapperFrom(errorlog) {
let indexRecursionWrapper = -1;
for (let i = 0; i < errorlog.length; i++) {
if (errorlog[i].includes("RecursionWrapper")) indexRecursionWrapper = i;
}
if (indexRecursionWrapper != -1) errorlog.splice(indexRecursionWrapper, 1);
return errorlog;
}
function generateAssertionLog(errorLineInLog, code) {
// PROBLEME s'il y a des parenthèses non correctement parenthésées dans l'expression à parser !
let codeTable = code.split("\n");
errorLineInLog -= 1;
let endErrLineLog = errorLineInLog;
let countPar = 0;
do {
// multilines assertions
countPar += countParenthesis(codeTable[endErrLineLog]);
endErrLineLog++;
} while (countPar !== 0 && !/^(\s*assert)/.test(codeTable[endErrLineLog]));
return `${codeTable
.slice(errorLineInLog, endErrLineLog)
.join(" ")
.replace("assert ", "")}`;
}
function generateErrorLog(
errorTypeLog,
errorLineInLog,
code,
mainCodeLength = 0
) {
let conversionTable = {
AssertionError: "Erreur d'assertion",
SyntaxError: "Erreur de syntaxe",
ModuleNotFoundError: "Erreur de chargement de module",
IndexError: "Erreur d'indice",
KeyError: "Erreur de clé",
IndentationError: "Erreur d'indentation",
AttributeError: "Erreur de référence",
TypeError: "Erreur de type",
NameError: "Erreur de nommage",
ZeroDivisionError: "Division par zéro",
MemoryError: "Dépassement mémoire",
OverflowError: "Taille maximale de flottant dépassée",
TabError: "Mélange d'indentations et d'espaces",
RecursionError: "Erreur de récursion",
ValueError: "Valeur incorrecte",
UnboundLocalError: "Variable non définie",
};
// Ellipsis is triggered when dots (...) are used
errorTypeLog += errorTypeLog.includes("Ellipsis")
? " (issue with the dots ...)"
: "";
for (const errorType in conversionTable) {
if (errorTypeLog.includes(errorType)) {
if (errorType != "AssertionError") {
return errorMessage(
conversionTable[errorType],
errorLineInLog,
errorTypeLog
);
}
let prefix = "";
let isPublicTests = mainCodeLength != 0;
if (isPublicTests) prefix += stress(" Erreur avec les tests publics :\n");
let isNoDescriptionInAssertion = errorTypeLog === "AssertionError";
if (isNoDescriptionInAssertion) {
errorTypeLog = `${errorTypeLog}: test ${warning(
generateAssertionLog(errorLineInLog + mainCodeLength, code)
)} échoué`;
}
return (
prefix +
errorMessage(
conversionTable[errorType],
errorLineInLog + mainCodeLength,
errorTypeLog
)
);
}
}
}
function generateLog(err, code, mainCodeLength = 0) {
err = String(err).split("\n");
let p = -2;
let lastLogs = err.slice(p, -1);
// catching relevant Exception logs
while (
!/line\s[0-9]+($|[^)]+)/.test(lastLogs[0]) ||
lastLogs[0].includes("RecursionWrapper")
) {
lastLogs = err.slice(p, -1);
p--;
}
var errLineLog = lastLogs[0].split(",");
// catching line number of Exception
let i = 0;
while (!errLineLog[i].includes("line")) i++;
// When <exec> appears, an extra line is executed on Pyodide side (correct for it with -1) // corrected in version XXX ?
let shift = errLineLog[0].includes("<exec>") ? -1 : 0;
//let shift = 0;
errLineLog =
Number(errLineLog[i].slice(5 + errLineLog[i].indexOf("line"))) + shift; //+ src; // get line number
lastLogs = removeRecursionWrapperFrom(lastLogs);
// catching multiline Exception logs (without line number)
var errorTypeLog = lastLogs[1];
p = 2;
while (p < lastLogs.length) {
errorTypeLog = errorTypeLog + "\n" + " " + lastLogs[p];
p++;
}
console.log(errorTypeLog, errLineLog, code);
console.log(mainCodeLength);
return generateErrorLog(errorTypeLog, errLineLog, code, mainCodeLength);
}
const pluralize = (numberOfItems, singularForm, pluralForm = "s") => {
let plural = pluralForm != "s" ? pluralForm : singularForm + "s";
return numberOfItems <= 1 ? singularForm : plural;
};
const enumerize = (liste) =>
liste.length == 1
? liste.join("")
: liste.slice(0, -1).join(", ") + " et " + liste.slice(-1);
function restoreEscapedCharacters(codeContent) {
return codeContent
.replace(/bksl-nl/g, "\n")
.replace(/py-und/g, "_")
.replace(/py-str/g, "*");
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter