Skip to content
Mathieu Guindon edited this page Oct 8, 2023 · 1 revision

Welcome to the Rubberduck3 wiki!


Structure

Rubberduck 3.0 splits projects in 3 distinct parts:

  • /Client libraries that run within the host process.
  • /Server libraries and server executables that run outside of the host process.
  • /Shared contains libraries that define types and resources used by both client and server components.

Client

The client side of things includes the connect/disconnect add-in entry points, VBE Extensibility API COM wrappers and the unmanaged ITypeLib API, all user interface components and their respective view models, and LSP client-side handlers.

Rubberduck.Main

The assembly (Rubberduck.dll) that the VBIDE loads as COM add-in, home of the client-side composition root and referencing every client and shared library in the solution. This assembly shouldn't need to change much, beyond service registrations ...and refactorings around that.

Project References
  • Rubberduck.Client
  • Rubberduck.Core
  • Rubberduck.Interaction (to be removed)
  • Rubberduck.InternalApi
  • Rubberduck.Resources
  • Rubberduck.SettingsProvider
  • Rubberduck.UI
  • Rubberduck.UI.WinForms
  • Rubberduck.UI.Xaml
  • Rubberduck.VBEditor
  • Rubberduck.VBEditor.VBA
  • Rubberduck.VBEditor.VB6 (to be added)

Rubberduck.Client

This library contains the language client service that configures and starts the LSP server process, and abstractions to do the same for eventual update and telemetry server processes. It also exposes client services so a library like Rubberduck.Core can use it to send requests and notifications to a server process; these services provide a layer of indirection between OmniSharp and the rest of Rubberduck.

Project References
  • Rubberduck.Interaction (to be removed)
  • Rubberduck.InternalApi
  • Rubberduck.SettingsProvider

Rubberduck.Core

Everything the editor needs - view models, services - should be found under a dedicated namespace in this assembly.

Project References
  • Rubberduck.Client
  • Rubberduck.Interaction (to be removed)
  • Rubberduck.InternalApi
  • Rubberduck.Resources
  • Rubberduck.SettingsProvider
  • Rubberduck.UI
  • Rubberduck.UI.WinForms
  • Rubberduck.VBEditor

Rubberduck.Interaction

This assembly should be folded into Rubberduck.Core, as it it nothing more than a namespace for messagebox services and abstractions.

Project References
  • Rubberduck.InternalApi

Rubberduck.UI

Should probably also be folded into Rubberduck.Core, as it consists of models and view models.

Project References
  • Rubberduck.InternalApi
  • Rubberduck.Resources
  • Rubberduck.Unmanaged

Rubberduck.UI.WinForms

Will eventually disappear, unless we decide to keep the native dockable toolwindow as an option. RD3 UI otherwise no longer needs any WinForms components.

Project References
  • Rubberduck.UI
  • Rubberduck.UI.Xaml

Rubberduck.UI.Xaml

Will ultimately be just Rubberduck.UI, with the XAML markup for every UI component in Rubberduck - even the splash window.

Project References
  • Rubberduck.InternalApi
  • Rubberduck.Resources
  • Rubberduck.UI

Rubberduck.Unmanaged

Extracted from Rubberduck.VBEditor, this assembly contains all the native Win32 code and COM wrapper types. It targets Framework 4.8.1 only because a handful of Marshal methods are not available under .net 7.

Project References
  • Rubberduck.Resources

Server

Rubberduck.ServerPlatform

A small library that exposes models and services shared between servers.

Project References
  • Rubberduck.InternalApi

Rubberduck.LanguageServer

Defines the handlers, models, and services used by the language server, as well as the language server itself.

Project References
  • Rubberduck.ServerPlatform
  • Rubberduck.SettingsProvider

Shared

Rubberduck.SettingsProvider

Defines abstractions and models for everything around configuration settings.

Project References
  • Rubberduck.InternalApi

Rubberduck.InternalApi

Defines shared models, services, extensions, etc. that must be accessible from multiple assemblies, whether on the client, server, or both sides.

Project References
  • Rubberduck.Resources

Rubberduck.Resources

Organizes and exposes bitmaps and localized strings used everywhere in Rubberduck. This library has no project references.