1. A method for controlling a storage device for searching source code stored in the storage device, the method comprising: receiving a search string, a feature type and details of source code to be searched; parsing the source code to be searched to generate an abstract syntax tree; indexing the abstract syntax tree using a search structure defining all source code features for which searching is enabled, wherein the source code features for which searching is enabled are defined during an initialization process that includes generating a parser based on a grammar of a programming language of the source code, the parser for parsing the source code, and the source code features for which searching is enabled including only a selected subset of source code features associated with the programming language; searching for the search string of the feature type in the indexed abstract syntax tree using an index corresponding to the feature type and a results structure defining the search outputs to be retrieved; providing a structured search result based on the output of the searching; and storing the structured search result in the storage device.