Generators

FeedBaG++ provides the infrastructure to compose several generators to capture the enriched event stream of development actions.

The idea is that a generator takes care of instrumenting a specific part of Visual Studio and captures a specific kind of event. For example, we were interested in how people are using the code completion tool IntelliSense, so we created a generator that captures CodeCompletionEvents. In addition to the basic information (e.g., trigger time, duration), the generator takes a snapshot of the editor content at trigger time and also captures the selected proposals in the IntelliSense popup.

To capture a new kind of event, you will only have to implement a new generator. FeedBaG++ provides the remaining infrastructure automatically.

It is quite easy to provide new generators, please refer to the existing generators and existing events in the repository.

Optional Components

Once you have implemented your generator and you new event type, you are done and can capture the new data. This is only half of the story and you should think about providing some optional components.

  • Serialization Tests
  • We strongly recommend you to provide some serialization tests to make sure that you are not breaking existing data when you update your event type in the future.
  • Anonymization
  • Be aware that you are collecting sensitive information. For this reason, FeedBaG++ allows the user to request an anonymization of the captured event on upload. You should provide an anonymization component for your event type that redacts the sensitive information (e.g., file names, identifiers), if requested.
  • Java Bindings
  • A core principle of the KaVE project is that it enables research on the event stream. Most of the provided tooling is provided in the CARET platform for Java. This means that you should make sure that your newly generated events can be read on the Java side too.