Function list for Caml

  • @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
                            \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 = (10-length) and
    					y = 10 in
    				let canBePlaced = ref true in
    				for i=0 to pred length do
    					if plateauO.(x+i).(y)<>" " then canBePlaced := false;
    				if !canBePlaced then begin
    					for d=0 to pred length do
    						plateauO.(x+d).(y) <- (boatSymbol.(boat));
    					tabBateauO := Array.concat [!tabBateauO; [|(x, y, (boat, false), 1)|]];
    					isPlaced := true;
    			end else begin
    				let y = (10-length) and
    					x = 10 in
    				let canBePlaced = ref true in
    				for i=0 to pred length do
    					if plateauO.(x).(y+i)<>" " then canBePlaced := false;
    				if !canBePlaced then begin
    					for d=0 to pred length do
    						plateauO.(x).(y+d) <- (boatSymbol.(boat));
    					tabBateauO := Array.concat [!tabBateauO; [|(x, y, (boat, false), 0)|]];
    					isPlaced := true;
    	Array.iter (fun ligne -> begin
    		print_string "|";
    		Array.iter (fun symb -> print_string (symb^"|");) ligne;
    		print_string "\n";
    		end;) plateauO;

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


  • 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


    is intended as


  • 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?

Log in to reply