Salut les mecs,

J'ai apporté une touche finale à une fonction sensée prendre en paramètre le 
texte de l'erreur, le parser afin d'y repérer le chemin du fichier de l'erreur 
et la position de la ligne éronnée, avant de s'y déplacer dans l'onglet courant 
ou dans un nouvel onglet.

Je précise que j'ai fait face à un problème d'expression régulière que je juge 
incompréhensible avec la fonction re.match.

En effet, la ligne suivante me renvoit None alors que dans le texte il y a bien 
l'expression "error":

re.match("error", errorMessage, re.I)

Je l'ai trituré dans tous les sens, ce test échouait à chaque fois.

Finalement j'ai dû passer par la fonction re.finditer qui elle trouve bien 
l'expression bien que ça ait été plutôt bancale.

Bref, l'essentiel était d'abord que ça marche. Pour les 
puriste/linguistes/académiciens du python, ils repasserons après moi.

Attention, voici la fonction:

Début du code python

def goToLineOfError(errorMessage):
 """Amène le focus sur une ligne d'erreur
 après l'avoir reconnue en parsant le message d'erreur
 Renvoi True en cas de succès de déplacement"""
 found=re.finditer("error", errorMessage, re.I)
 i =0
 for e in found: i=i+1
 if i==0: return False
 file=""
 line=0
 found=re.finditer('file[ \\t]+"([^"]+)"[ \\t]*,[ \\t]+line[ \\t]+(\\d+)', 
errorMessage, re.I) 
 for e in found: file, line= e.group(1), int(e.group(2))
 if line>0 and os.path.isfile(file):
  page=sp.window.curPage # par défaut
  # si le fichier pointé n'est pas le fichier de la page courante
  if os.path.samefile(file, sp.window.curPage.file)==False:
   # on vérifie s'il n'est pas déjà ouvert dans les onglets inactifs
   flag=False
   for p in sp.window.pages:
    if os.path.samefile(file, p.file)==True:
     page=p
     flag=True
     break
    # end if
   # end for
   if flag==False: page=sp.window.open(file)
  # end if
  # positionnement à la ligne de l'erreur
  page.position=page.lineStartOffset(line-1)
  page.focus()
  return True
 else:
  return False
 # end if
# end def


Fin du code python

Ma proposition est que cette fonction pourrait être appelée dans la fonction 
d'exécution du module courant, après qu'un texte de renvoi ait été recueilli, 
et avant que ce texte ne soit envoyé à la pseudo console de 6pad++.


Pour vous servir,

Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net

Répondre à