We think of symbols as the standard types, arrays, classes, fields, functions, variables, parameters, and all of the related built-in standard functions and library functions as described in the documentation Programmers Reference.
In order to make it easy to insert these symbols in the source code, the IDE can generate a list of symbols which is presented when invoking the menu item Select Symbol from the Edit Menu or simply by pressing Ctrl+Space in the editor. The current editor position of the cursor represents the insertion point of where to insert a chosen symbol.
Symbols can be inserted by double-clicking a symbol, or selecting a symbol and pressing Enter or clicking the Select button. Insertion can also include the arguments of a function. Once a symbol is passed back to the insertion point of the editor, the form of symbols looses focus and is usually closed, however it can remain open, which may be convenient in certain situations - e.g. when multiple symbols are to be selected.
Which Symbols to Present.
The list of symbols is generated by the compiler in a context sensitive manner doing a quick syntax check to search for the relevant symbols dependent on the current position of the cursor. This is described in more detail for the compiler.
If any syntax errors interfere with the search for relevant symbols, then the list of symbols may be incomplete, in which case the form presents a small error log indicator in the upper right corner of the form (see example 2 below) to indicate errors have been reported to the Error Log.
When the form is opened it can either present all the relevant symbols, or it can use a filter to present only a subset.
Example 2. Notice the red error log indicator.
If the cursor doesn't touch any text, then the form is opened without a filter, presenting all the relevant symbols in a tree structure grouped by their origin and/or functionality making it easy to look for symbols in a context based manner.
If the cursor is positioned in a text with some of the text located to the left of the cursor, then this left part of the text is used as a filter, and only symbols containing this filter in some form are presented. The filter is not case sensitive.
If the cursor is positioned after a dot - e.g. like myTxt.| then the type of the expression left of the dot is used to identify which functions are relevant to present. For class objects - e.g. like myObj.| this could also include class-fields, class-functions and built-in standard functions. If some text exist between the dot and the cursor - e.g. like myTxt.trim| then this text trim is used as an additional filter to narrow down the presented symbols even more.
If the form is using a filter, it is presented and can be edited. If the filter is removed, the symbols are presented in the default tree structure.