# Function list for Caml

• Thanks all of you !

Problem solved with @guy038’s method making a backup of the Notepad++ folder in AppData and delenting this one. Maybe you have you have to restart NPP to refresh the functionList rules. I don’t know why, but it was as if it kept the old functionList.xml even if I had modified it. Weird… Now, I will improve the regex selector, I will share here the code for those who are interested.

Merci à toi @guy038, j’ai fait exactement ce que tu m’as dit et ça a marché. J’avoue que je réchignais un peu à faire ça car j’avais pas mal customisé NPP mais j’ai juste à copier-coller le contenu donc aucun problème. ^^

• @Tom-Saury said:

Maybe you have you have to restart NPP to refresh the functionList rules

Yes! If you manually-edit any of Notepad++'s configuration files (and for functionList.xml that is the only way), changes aren’t going to be picked up until you restart Notepad++. I really think this is obvious, even if you aren’t all that familiar with Notepad++.

And FYI, be careful when manually editing other config files, because upon shutdown Notepad++ may need to overwrite them with its own changes, blowing away any manual edits you may have done.

• Wasn’t obvious to me, my bad. This post wouldn’t be there if I knew this. :
It’s written no where, how can you know that the refresh button doesn’t refresh the rules ?

• @Tom-Saury

Wasn’t obvious to me

That’s fine, we all have different levels of experience with computers in general. I hope you didn’t spend a lot of time thinking your expressions must be wrong if the right stuff didn’t happen right when you saved the xml file!

Later thought: Actually, I don’t know what the refresh button in the Function List window does. For all I know it may do what you originally thought and something else was wrong?

• The refresh-button refreshes the function list i.e. re-parses the active buffer/source file which isn’t saved yet. When saving a file the refresh is automatically triggered.
To refresh the parser itself after changing functionList.xml you have to restart Notepad++.

• Hey everyone !
Could someone tell me why does “for” match here ?
Here is my function parser :

                mainExpr="(?x)                                              # free-spacing (see RegEx - Pattern Modifiers)
let                                                 # start-of-function indicator...
\s+                                                 # ...should be followed by at least one white-space
(rec\s+)?
\K                                                  # discard text matched so far
[a-z_]\w*                                           # valid character combination for identifiers
\s+                                                 # start-of-parameters indicator
([a-z_]\w*(\s+[a-z_]\w*)*\s+                        # several parameters are optional
)|($$\s*$$\s+)                                         # parameters are optional
=                                                   # function-header-body separator
.+                                                  # whatever, until...
\s+in\s                                             # ...end-of-function indicator
"


and here is my source code :

let boatGenO () =
for boat=0 to 4 do
let length = boatLength.(boat) in
let isPlaced = ref false in
while not !isPlaced do
if (Random.bool()) then begin
let x = Random.int (10-length) and
y = Random.int 10 in
let canBePlaced = ref true in
for i=0 to pred length do
if plateauO.(x+i).(y)<>" " then canBePlaced := false;
done;
if !canBePlaced then begin
for d=0 to pred length do
plateauO.(x+d).(y) <- (boatSymbol.(boat));
done;
tabBateauO := Array.concat [!tabBateauO; [|(x, y, (boat, false), 1)|]];
isPlaced := true;
end;
end else begin
let y = Random.int (10-length) and
x = Random.int 10 in
let canBePlaced = ref true in
for i=0 to pred length do
if plateauO.(x).(y+i)<>" " then canBePlaced := false;
done;
if !canBePlaced then begin
for d=0 to pred length do
plateauO.(x).(y+d) <- (boatSymbol.(boat));
done;
tabBateauO := Array.concat [!tabBateauO; [|(x, y, (boat, false), 0)|]];
isPlaced := true;
end;
end;
done;
done;
Array.iter (fun ligne -> begin
print_string "|";
Array.iter (fun symb -> print_string (symb^"|");) ligne;
print_string "\n";
end;) plateauO;
in


I expected that only boatGenO matchs but it’s not the case and I can’t figure out why.

Cheers

• Make sure you have whitespace at the end of your source file e.g. newline.

• Have a good look at how you parse for (optional) function parameters e.g. are the parentheses optional or mandatory?

• Furthermore, I presume

([a-z_]\w*(\s+[a-z_]\w*)*\s+)|($$\s*$$\s+)


is intended as

([a-z_]\w*(\s+[a-z_]\w*)*\s+|$$\s*$$\s+)


• Indeed, the whitespace at the end was a problem so I replaced \s+in\s with \sin\$
Still the problem with “for”. I noticed that it happend only with functions which has no parameters, but why…

• Did also remove the superfluous parentheses?