* added "--shallow" command line option to request shallow indexing
* modified behavior of Sourcetrail to always perform a deep index if not explicitly specified differently by the user
* fix compiler issue where string was returned instead of wstring
* fix boost caching in CMakeList: for CMake 3.12.2 the "set" command requires a docstring if the CACHE flag is set
getSearchTypeName() needs to always return std:wstring.
We cover all cases because our switch contains all current possibilities
for Search_Type.
But the compiler will still warn/error on this, depending on system
configuration.
Regards https://github.com/CoatiSoftware/Sourcetrail/issues/758
elide() needs to always return std:string.
We cover all cases because our switch contains all current possibilities
for ElideMode.
But the compiler will still warn/error on this, depending on system
configuration.
I would like to add a `return "";` or `return str;` or add a `default:`
case to the switch to silence this compiler complaint.
Regards https://github.com/CoatiSoftware/Sourcetrail/issues/758
Currently the output of these tests depends on the c++ standard library that is installed on the executing machine. So for some machines these tests would pass while they fail on other machines.
* removed preprocessor guards in language specific files to avoid "file has no symbols" warning
* separated files into multiple lists in lib and lib_gui CMakeLists.txt for each language package
* in addition: add unloadable sourcegroup to visualize, load and save information when loading a project that contains source groups that are not supported by the build
* use flags of first source file that specifies an "-include-pch" flag for generating the .pch file
* allow to save project settings without specifying input header file if cdb contains -include-pch args
* show proper error message in console when project configuration has issues
* quit when project configuration is wrong
* show indexing progress as self-updating percentage
* open custom trail dialg via button in top of trail controls
* search from symbol to symbol or all referenced/referencing of symbol
* define search depth with slider
* define horizontal/vertical layout
* define node and edge types
* renamed depth graph to trail in graph ui
* added custom trail UI tests
fortune cookie message = A happy surprise is waiting for you.
* removed unused utilityMath
* removed some unused functions from utility
* moved time related utility functions to TimeStamp
* moved path objects from utility to app/paths
* moved objects in lib to lib/app
* removed duplicate confirm methods in DialogView
* moved utilityFile to utility/file
* removed uint typedef and replaced with size_t everywhere
* removed boost header in utilityUuid
* further change: initialize all llvm targets before indexing
* further change: remove configurable dependencies directory from gradle and maven sourcegroups
* moved initView() implementation where used into constructor
* specify methods as override instead of virtual where applicable
* use default destructors where applicable
* reduced mouse drag sensibility when clicking on graph nodes
* also edit search element when cursor in front and pressing DELETE
* scroll to up to minimized snippet after minimizing when scrolled down far
* Python sourcegroup now displays if a provided Python environment is valid
* update used version of SourcetrailPythonIndexer
* changed executeProcess() to return the process' exit code and console output
* use multiple columns for access nodes if no child has edges
* try to layout close to a square
* layout neighboring accesses to the width of the largest
* increase threshold to hide children on parent activation to 100
* use square layouting in inheritance trees as well
* Implemented new format splitting user, version, and usage period into separate lines
* Refactored all classes: License, LicenseGenerator, LicenseChecker
* Removed redundant license check hash from ApplicationSettings, don't generate, store and check it anymore
* Moved license checking and encoding logic to LicenseChecker
* Moved default for license generation to main.cpp
* Refactored license checking logic in whole app, removed involved message types
* Added LicenseCheckerTestSuite for checking all legacy and current license types
* Generate new license type lifelong
* Rerun header path detection when only cxx header path is present after update in migration
* Check if path exists in header and framework path detection on mac/linux
* Always add compiler header path when prefilling on first start, regardless of successful detection
* Show compiler header path in path list box on top and readonly
* Prepend compiler header path on Windows in system header path compiler flags, append otherwise
* Show warning when saving ApplicationSettings if compiler header path is not in global include paths
* Show warning when saving ApplicationSettings if there is another path containing compiler headers
* updated version of fallback ApplicationSettings.xml to current settings version
* removed is-empty-check when pre-filling settings at the first start of Sourcetrail
* pass file language from storage to code view
* load syntax highlighting rules files from install directory "syntax_highlighting_rules"
* files must be named <language_identifier>.rules to make syntax highlighting work
* Added new Source Group type SourceGroupCustomCommand to UI and ProjectSettings
* The Source Group executes a specified command on every source file
* The variables $SOURCE_PATH, $PROJECT_PATH, $DB_PATH, $STORAGE_VERSION can be passed
* The commands are executed after all other source groups finished indexing
* The command is executed with working directory set to project directory
* Errors during command execution are shown as status update and in the Status View
* SourceGroupCustomCommand cannot be partially cleared, when one file needs clearing the project must be fully re-indexed
* Enabled errors table during indexing
* Store intermediate errors in StorageCache
* Open tab for errors if no tab yet
* "Show errors" for file disabled during indexing
* Hide indexing dialogs with ESC instead of stopping indexing
* Fixed indexing can be interrupted when dialog hidden
* Clear intermediate storages when interrupting
* Abort waiting for less queued storages when indexing interrupted
* Don't index another file when indexing was already interrupted
* Moved indexing interrupted progress dialog to TaskBuildIndex
* Use MessageIndexingInterrupted instead of MessageInterruptTasks
* Added tab bar to top of main window with UI/shortcuts similar to web browsers
* ComponentManager offers components for 2 use-cases: application and tab
* Application components: log view (status/errors), bookmarks, screen search, status bar, tabs, tooltips, dialogs and all tab views disabled
* Tab components: graph, code, history and search
* When a project is loaded there is always at least one tab, otherwise there is none
* Each tab replaces the application views of the same name in the main layout when activated
* Each tab has it's own TaskScheduler, to process tasks independent from other tabs
* The application has a global TaskScheduler for application wide tasks
* The singloton class TaskManager is responsible for managing the TaskSchedulers
* MessageListeners and Messages hold an optional schedulerId, both must be set to only send to a specific TaskScheduler
* Bookmark buttons where split off into a separate view per tab, bookmark managemement is done in the application
* History menu processing is done by the QtMainWindow now
* Screen search is an application component, the responders are always changed to the active tab
* Plugin messages are opened in a new tab
* Symbols can be opened in a new tab via middle click/context menu in graph, code, history dropdown
* Full text index creation is mutexed now in PersistenStorage to make it fully thread-safe
* All tabs are closed when switching projects
* Tab contents are only animated when visible
fortune cookie message = Catch your lucky star!
* fixed Boost c++ standard
* build with docker on mac
* added mail script
* fixed cxx index sample test on mac
* disabled gradle source group test for linux docker builds
* changed expected output of Bullet and Box2D to new formatting (without duplicates)
* minor additions due to clang update
* updated expected output of TicTacToe project with all headers indexed
* don't use thread::detach() in TaskGroupParallel::terminate to make it useful for tabs
* properly terminate TaskFillIndexerCommandQueue
* fixed wrong microsecond delays
* moved some task delays to TaskDecoratorRepeat for better transparency
* News are passed as JSON string, containing an array of news items.
* Each news item has version and content (html).
* Items can be filtered by min/max version, OS and license. The first item that fits is used.
* Items can be important, which highlights the news box.
* News are not shown if older than 5 days.
fortune cookie message = You will be financially successful in case your actions are well planned.
* use in local index building during refresh
* use in read cache building on project load
* use in some storage access requests
* also slightly improves speed
* fixed undoing to multiple actives didn't show all nodes in graph
* fixed wrong name in search bar, status message and history dropdown
* fixed flicker when activating multiple nodes in code view
* Fixed TaskFillIndexerCommandQueue exiting right away when all commands fitted into queue on first call
* Fixed TaskBuildIndex exiting right away when starting of indexer processes takes longer than the update cycle
* Refactored Indexing Tasks Behavior Tree
* Pass NameHierarchy to record new symbol returning an Id
* Cache symbol Ids in Parser implementation
* Reuse symbol Ids as reference when recording related data
* Pass FilePath to record new file returning an Id
* Cache file Ids in CanonicalFilePathCache
* Store file Id in ParseLocation instead of FilePath
fortune cookie message = You know a silent way to impose your will.
* Removed storage checks and single use methods
* cache file ids in ParserClientImpl to avoid lookup for every source location
* NameHierarchy::serialize with range to avoid copies when adding nodes
* removed duplicate code in IndexerCxx and IndexerJava, moved to Indexer
* use unique_ptr for CxxName handling
* create CxxNameResolver from other
* improved string handling in CxxName types
* only traverse decls within projects
* use macro in ast visitor to call into each component instead of virtual calls
* improved CxxName caching performance
* refactored CxxNameResolver classes to use less locals
* removed paths in include directives
* changed cmake to provide necessary header search paths
* changed name of version.h to productVersion.h due to name conflict
* moved SystemHeaderSearchPaths and FramewordSeearchPaths of indexer cxx indexer commands to CompilerFlags section
* added SourceGroupTestSuite to test indexer command generation of all source groups
* removed "compile_commands.json" from gitignore, because a resource file for the tests has this name
* fixed case where "to-index" state of a file has changed and thus the file needs to be re-indexed
* clear and re-index files that depend on changed non-indexed files
* clear and re-index files referenced by unchanged but cleared (due to referencing a changed file) files
* fixed: updated files with changed timestamp that do not have content in the db will now count as changed
* refined refresh info generator tests
* updated checklists for manual project setup tests
* implemented task for sending IndexerCommands to shared memory on demand
* SourceGroups now return IndexerCommandProviders instead of just a list of indexer commands. This way information can be stored in a compressed format
* merged IndexerCommandCxxEmpty and IndexerCommandCxxCdb
* moved sorting of indexer commands by file size from IndexerCommandList to TaskFillIndexerCommandQueue
* removed obsolete IndexerCommandList class
* wait for IndexerCommandQueue to be filled before starting the indexers
* restart finished indexer processes while indexerCommandQueue is still running
* restart indexer threads as long as there are indexer commands to process
* removed Blackboard::getMutex() and added an atomic update() method
* we don't need to get the complete compile commands for this
* as a fallback, querying a single compile command for a file is fast, because it is stored in a map
* use std::string instead of std::wstring in temp indices
* use number types for edges and source locations in temp indices
* use map::emplace where appropriate
* moved 100 occurence insert optimization fully to sqlite index
* Fixed crash when signature was wrongly recorded
* Fixed line break at wrong position for template functions/methods
* Fixed already qualified name replace with qualified name, repeating qualifiers
* added tests for java type argument recording
* implemented recording type arguments for java ExpressionMethodReferences
* changed type_argument edge to originate in generic type
* added type_usage edge for type_arguments that originates in context (e.g. calling method)
* add compiled statement for batch inserting 100 occurrences at once
* removed unnecessary primary key from component_access to get rid of additional index table
* changed explicit check for existing symbols when injecting to implicit check in insert statement (insert or ignore)
* improved performance of adding edges by replacing edge multi part index with in-memory-index
* added in-memory-index for node table
* added in-memory-index for local_symbol table
* added in-memory-index for lource_location table
* moved setting storage mode to SqliteIndexStorage, because storage modes are not used anywhere else.
* don't store current mode as member because re-creating an existing index takes no time.
* add getter for name of SqliteDatabaseIndex
* removed unused method from persistent storage
* fixed crash when storage access proxy tries to access a deleted storage pointer
* refactored StorageAccessProxy implementation to use macros to generate proxy methods
* improved performance of "prepare indexing" step for all cxx source groups except empty
* unified code for filtering to contained file paths of source groups
* cleaned up code of SourceGroupFactoryModules
* fixed building longest common prefix array for full-text search by making values not relative the the charcode of the "a" character, because this would result in characters (e.g. "_") having a negarive value.
* centralized all file path caching in CanonicalFilePathCache
* added cache by clang::FileID
* moved FileRegister into CanonicalFilePathCache and removed it from AST* classes
* only record files once
* all dialogs for the indexing usecase can be hidden regardless of project state
* fixed some dialogs could not be shown
* pass dialogview into project and all indexing tasks
* pass application to project and tasks
* pass log directory absolute to indexers
* pass app and user paths absolute to indexers
* removed QCoreApplication instance from indexer process
* removed mutex from ConsoleLogger
* updated shortcut window
* renamed code reference menu items
* Show graph legend via 'legend' command or '?' button in the lower right corner
* Legend is not interactive: nodes and edges not clickable or moveable
* CXX and Java node types are mixed
* added clang system headers to data folder of Sourcetrail repo
* added clang system header search directory to detected directories on windows
* updated migration to add clang system header search directory on windows
* updated windows installer and portable package to include compiler headers
* updated linux package
* cleaned code of path detectors
* unrelated removal of unnecessary code in LicenseChecker and UpdateChecker
* switched SearchIndex and HierarchyCache to std::unique_ptr
* use move semantics and in-place initialization in StorageTypes and SearchIndex
* improved autocompletion speed by fixing contained node type checking
* added new location type
* refactored old recording code
* record signature locations for cxx functions and java methods
* added signature locations to sample project indexer tests
* ignore signature locations in ui
* signatures in tooltip with qualified name of the function/method
* added test for finding signature location of constructor with initializer list
* allow hiding of indexing dialogs to browse loaded project while indexing
* show indexing status in status bar while indexing
* use different dialog views for different use cases to avoid state collisions
* fixed error label in status bar jittering while indexing
* show hand cursors for clickable elements in status bar
* indexing is not interrupted on pressing ESC while in hidden
* disable error table and error label while indexing
* refactored indexing messages
* forbid indexing and changing project while indexing
* don't show indexing status messages in status bar when indexing in the background
* allow tasks to run in the background
fortune cookie message = A journey is waiting for you.
* keep old database on filesystem while indexing
* migrate old ".coatiproject" settings to new ".srctrlprj" extension when loading project
* send new errors in MessageErrorCountUpdate after injecting
* recheck filepath exist() in FileSystem's remove, rename, copy and create functions
* updated tasks to new "override" policy
* Common base class MessageActivateBase for activation messages with getter for SearchMatches
* Removed duplicate logic for creating SearchMatches from Messages
* Fixed can't reactivate fulltext search from history menu
* Renamed history message and moved to sub directory
* Fixed activating node type filters didn't clear code view
* Handle all error related messages in ErrorController
* Moved error filter state from Storage to ErrorController
* Moved all error related messages to type/error subdirectory
* Enable all errors shown by default
* Always show unfiltered error count in status bar and overview
* Fixed all errors shown again when changing error filter on errors for file
* also added current page count (e.g. 1/3) to project setup
* moved the code for copying a source group to the settings classes so that the wizzard doesn't need to know which source groups may be there anymore.
* fixed intermediatestorage merges might lose file indexed/complete information
* fixed changing file complete to true only possible if the file has no errors
* fixed clicking show errors for a file where no asociated errors were found showed all errors
* replace path to local compiler headers with packaged ones in include path detection
* added app settings migration to replace local compiler header path with path to packaged headers
* Flattened sourcegroupsettings class hierarchy by moving cross compilation options to own base class
* QtProjectWizzardContentFlags constructor required correct settings object to reduce the need for type casting
* QtProjectWizzardContentPath constructors required correct settings objects
* moved SourcePaths from SourceGroupSettingsJava to SourceGroupSettingsJavaEmpty because they are not required for Gradle and Maven projects
* removed classpath from maven and gradle source group settings
* reuse code of SourceGroup for "show source files" in wizard
* also changed xml elements in sourcegroup settings that specify the used language standard, so that one sourcegroup can maintain multiple language standards
* added migration and migrated sample projects
* added classes for loading a Sonargraph project
* added Sonargraph options to project setup wizard
* added test for generating indexer commands from Sonargraph modules
* fixed sqlite storage crashing in constructor when parent directory of provided path does not exist
* removed unused FileRegister from Java indexing
* removed unused info from IndexerCommandJava
* refactored loading and saving of SourceGroupSettings
* extracted sourcepaths settings to own class that can be re-used
* merged CDB wizard contentents for source file and indexed paths
* unified wizard content for sonargraph project path
* removed include filters from default source groups
* extracted generation of RefreshInfo from Project to RefreshInfoGenerator
* added tests for RefreshInfoGenerator
* added language and standard selection to sonargraph project setup
* added auto-detection for indexed header paths of sonargraph cmake json modules
* Sonargraph::Project can enable/disable support for specific modules
* warn if sonargraph project contains no matching modules
* indexed headers can be detected from sonargraph project
* disable re-pre-filling of indexed header paths if these are empty when showing settings of a cdb sourgroup
* fixed indexed header path were not regarded when deciding if project settings have been updated
* prevented indexed header paths for CDB to be appended to compile command
* fixed exists check for relative paths in QtSelectPathsDialog
* indexed header paths will automatically be updated when a new compilation database is picked
Cxx AstVisitor re-visits previously or simultaneously indexed files because the "visible" content may have changed due to other preprocessor defines etc.
* put nodes with bidirectional aggregations on the left
* layout aggregations either horizontal or vertical based on buckets
* exceed bucket height if only one element and vertical split
* fixed hiding nodes in sublayout showed empty spot
* fixed aggregation layout within group
* fixed moving of group did not resize view
* fixed edges behind group could not be hovered
* fixed overlapping lines in sublayout
* fixed use of correct column width in sublayout
* fixed build script for windows installer
* fixed java dependency version in windows installer
* accept eula in windows deploy script before indexing sample projects
* removed set license from windows deploy script before indexing sample projects
* implemented using multithreaing for building the fulltext search index
* also: decreased ideal thread count by 1 to keep the machine responsive while indexing and building the index
* extend horizontal edges to origin column width
* leave horizontal gap in the middle of the left and right buckets for routing edges
* move left and right buckets vertically so that edges enter and leave horizontally
* removed third pivoting for graph edges, all edges enter and leave relative to the node center now
* added buttons to enable grouping by file or namespace
* last used group settings saved to ApplicationSettings
* made groups hoverable/clickable on label only
* improved node hatching and override edge colors
* group overview lists
fortune cookie message = Seen with the eyes of love, everything gets a new meaning.
* split QtDirectoryListBox and QtStringListBox
* renamed QtDirectoryListBox to QtPathListBox
* extracted QtListItemWidget class to own file
* renamed QtListItemWidget to QtListBoxItem
* added SelectionPolicyType to QtPathListBox to allow for specifying if selecting files, directories or both should be allowed.
* added graph node for grouping nodes with separate sub-layout
* group nodes show name in top left corner
* clicking on single edge activates source locations of all edges
* removed separate setters for token components
* fixed text nodes missing or too many in list layout
* moved simple row and column layouts to ListLayouter
* added skewed layout type to ListLayouter
fortune cookie message = Sometimes you should have the courage and risk something.
* code annotations are loaded after showing the code file
* added traces
* refactored highlighter
* fixed error tooltip style in codeview
fortune cookie message = It's not the time that counts, but what you do with it.
* updated company name from "Coati Software OG" to "Coati Software KG"
* explained the "floating license" model in greater detail
* switched to display the amount of authorized users as "users" instead of "seats" in activation key
* extended the GRANT to explicitly mention that Sourcetrail can be installed on "any number of PCs"
* extended the GRANT to explicitly mention that Sourcetrail's commandline API may be used without entering an activation key
* extended the GRANT to explicitly mention that graph images exported from Sourcetrail may be used and published by the user
* added some more general details on "Severability", "Headings" and "No Waiver"
* fixed non-ascii characters not working in normal symbol search
* implemented support for non-ascii characters in fulltext search
* fixed fulltext search not working for symbols with lowest and highest character codes in a file
* using wstring in FullTextSearchIndex (causes this index to be dependent on text encoding selected in app settings)
* implemented rebuilding FullTextSearchIndex if used text encoding changed in app settings
* added utility lib
* use wstring in symbol and bookmark names
* fixed setting apppath in windows includes
* regard utf8 encoding in shared indexer commands
* regard utf8 encoding in shared indexer status
* removed header paths from VS Project setup message since VS doesn't send these anymore
* implemented using wstring in IDE communication
* fixed retrieving filepaths from QtDirectoryListbox that contain special characters
* use wstring for source extensions
* added special character as file extension to FileManagerTestSuite
* used wstring in FilePath constructor where easily possible
* added FilePath concatenate method that accepts string parameter
* implemented using only wstring in MessageStatus
* used wstring in config
* don't reset filepath used to open file picker dialog for SaveFileDialog
* don't reset filepath used to open filepicker for OpenProject dialog
* fixed non-native file picker starts in wrong directory if provided with filename to open (instead of directory)
* fixed non-native dialog displays machines root directory if empty path is provided
* also search for include paths of include directives extracted from header search paths
* extracted logic to gather unsolved includes
* extracted some code to filetree class
* fixed gaps in code view line indication for different fonts
* only allow latin fonts in fontpicker
* don't show 'files to clear' for full refresh
* fixed screen scale settings were visible on all platforms
* implemented detecting if Sourcetrail runs as installed version by checking if user folder exists next to exe
* removed "deploy"-flag mechanism for windows builds
* moved code to set the app path for windows builds to includesWindows.h
* implemented functions in setup bash script to copy dlls
* bash functions for installer and portable packaging
* Set environment variables QT_AUTO_SCREEN_SCALE_FACTOR and QT_SCALE_FACTOR on Linux on app start
* Added ScreenAutoScaling and ScreenScaleFactor to ApplicationSettings with dropdown boxes in the preferences
only visible on Linux
* Removed QtFontPicker and QtTextEncodingPicker
* Moved logging into preferences category "output"
fortune cookie message = You will have a peace of mind when you talk to an old friend
* removed "unknown" source group status type and implemented falling back to
"disabled", because "unknown" should not be handled anywhere in the rest of
the code base.
* added source group status (enabled/disabled)
* fixed bug where the removal of an indexed directory has not affected the files to clear
* added lots of const and override keywords in SourceGroupSettings
* changed order of compiler flags for CDB indexer commands so that manually added flags are appended to the flags form the compile command.
* removed usage of clang::tooling::FixedCompilationDatabase and used CompilationDatabaseSingle for empty and cdb indexer commands.
* removed reference to a specific clang tool (e.g. "cl" or "cl.exe") from compile command and prepended "clang-tool" before running the indexer.
* screen search matches in code view single not always cleared
* fixed copy full path in file title button broken
* fixed last snippet scrollbar not immediatly visible
* fixed dock title buttons on bottom on Windows
* fixed no gap between buttons on Linux
* fixed dark scheme title bar contrast
* fixed filter checkbox colors for dark schemes
* Added alternative tracer implementation that only stores an accumulation of trace
events. This is useful for handling large amounts of traced events.
* some parts of the indexer were called "manual" while others used the
name "empty". renamed everything that was called "manual" to "empty"
to conform to names in GUI
* implemented CxxDeclName constructors that just move the members
* removed empty destructors because they disable default move constructors
* removed some unnecessary code
* replaced ".size() == 0" with ".empty()" because it's more explicit
* improves indexing performance by roughly 5%
* switched to use uniqu_ptr for boost path to get rid of including boost in header
* added different methods to change the current FilePath or to make a copy and change that one
* used these methods appropriately throughout the code base
* removed exists() method from FileSystem because it is already contained in FilePath
* added const in some places
* removed post processing for anonymous typedefs. The storage transformation did not work in
cases where the typedef is recorded in a previously indexed header. No type information
was recorded while indexing the header a second time. But this type information would have
been required by the transformation.
* switch back to snippet view with snippet button in file title bar
* use new title bar widget in single view as well
* restore view mode on undo, store current view mode for every message id (added id to message)
* treat view mode switch as adapt message on undo stack
* fixed crash after snippet expansion
* fixed hatching in file title not shown
* Show title bar at top of snippet list if first file is cut off
* Show scrollbar at bottom of snippet list if last snippet if cut off and horizontally scrollable
* Extended scrollRequest API to different ScrollTarget modes
* Fixed snippet extension broken if maximized first
* Split off title bar functionality to separate class QtCodeFileTitleBar
* slightly darker function color in code for bright scheme
* fixed title offset in indexing progress dialog
* show progress dialog while starting indexers
* fixed text covered by flag in finish indexing dialog
* added and used QtFilesAndDirectoriesDialog in file list boxes for windows and linux
* implemented allowing to select multiple entries which adds more rows to the path listbox
* added radio buttons to start indexing dialog
* don't block task scheduler thread while start indexing dialog is visible
* don't force whole project refresh on settings change
* added help button to start indexing dialog explaining indexing modes
* disable unavailable modes when project needs full refresh
* improved label texts on indexing dialogs
* added --incomplete flag to index command of commandline API
* fixed deletion of window stack elements
* added CanonicalFilePathCache to also reserve the initially recorded casing of file names
* use canonical file path cache to resolve filepaths in names of symbols (anonymous, static, ...)
* null reference fixes
* added help button next to filters in error table
* added menu action Help -> Fixing Errors
* added help button on indexing dialog
* show help message after first time indexing with errors, if not seen already
* fixed recording template member specializations of methods as explicit nodes
* fixed template members variables sometimes recorded as functions with call edges
* fixed clicking on search element did not focus search bar
* fixed moving cursor between elements
* no smart pointers for search elements to fix deletion issues
* adjusted some help texts
* moved exclude paths and source file extensions contents to indexed paths selection in project setup wizard
* removed compiler flags from CDB project setup wizard
* added wizard content that shows some info text regarding the purpose of source groups
* renamed ContentSummary to ContentGroup
* fixed issue with CompilationDatabase include path extraction
* Added non-commercial use option to enter license window
* Show enter license window on first start and force license selection
* Added ApplicationSettings migration that removed private/academic license and switches user to non-commercial mode
* Added commandline option to choose non-commercial use and provide better hints to license selection
* Removed trial mode
fortune cookie message = A secret admirer will soon send you a sign of affection.
* init updatecheck ui with "checking for update..." to counter the effect of the timer start delay
* removed message box telling the user "everything is ok" after manual (forced) update check
* split header search path detector for VS into 2 different classes (one for VS2010 - VS2015 and one for VS2017)
* implemented detecting "ucrt" path for windows global headers
* indexer processes wait if already too many storages queued
* storage fetcher waits if already too many storages queued
* increased size estimation for shared memory of indexer commands
* Added MessageFilterNewErrors to combine messages for new errors
bug id = 471
* renamed scripts
* moved install, uninstall, deleteConfig scripts to top-level
* fixed desktop file not recognized on installation, only on restart
* removed Eula accept from install script
* abort install and uninstall when not running as root
* revised README
* changed ControllerProxy to template class
* allow passing method pointers and arguments to ControllerProxy
* replaced some messages with ControllerProxy calls
* moved logic from BookmarkView into BookmarkController
* added implementation for Gradle project setup (icon is still missing)
* refactored project loading/saving and SourceGroupSettings
* removed long deprecated Cxx UseSourcePathsForHeaderSearch option
fortune cookie message = There is true and sincere friendship between you and your friends.
* Use menu action "Edit -> Find in View" or Ctrl + D
* UI displayed as search bar at bottom of main window
* Hide search bar with ECS or close button
* Entering a query searches in name of graph nodes and code contents of code view
* Use Enter to iterate through matches, well move match into view in graph and code view
* Checkboxes allow for adding/removing results for certain views
* Create Bookmark shortcut is now CTRL + S
bug id = 79
* implemented recording template member specialitation relations for fields, static variables, member classes and enums
* added windows only tests that index whole projects (Bullet & Box2D) to prevent regression
* omit visiting a type in the name of a CxxDestructorDecl (which recorded a type reference)
* fixed range of names for Cxx destructors and overleaded operators.
* process more results
* fixed max results best score length
* fixed name shortening of template arguments
* fixed best results caching
* increased consecutive letter score
* fixed java indexer to continue working when a dependency path does not exist
* updated JavSymbolSolver with a lot of fixes for solving types that are defined inside jar files
* caching ccache and maven folder on ci
* new docker images st4ll1 -> coatisoftware
* in build script run setup script if no build/Release folder does not
exist
* changed commandline options to match the new format
* fixed 64bit package having no vscode plugin folder
* removed unnecessary reminders about the VS plugin
* fixed Sourcetrail being stuck while closing the application
* building Sourcetrail as Console application by default
* hiding console during runtime on Windows if Sourcetrail is started with GUI
* fixed section mentioning hatched elements in tutorial
* mention call/inheritance graphs in tutorial
* added new tut files to windows deployment package
get rid of most clazy warnings (https://github.com/KDE/clazy)
* range loop use refs
* qcolor ctor with ints
* missing Q_OBJECT macro
* use .constfirst instead of .first
enabled ccache for unix systems for fasterr recompiling
* if ccache is in path we use it now
* improved color scheme contrasts
* fixed code view single not updated to font size change
* fixed tooltip shown when hovering error location
* fixed previous reference count shown when fulltext search has no results
* fixed comment locations have been saved to wrong database table
* fixed usage of tryGetRealPathName on windows
* used real filename in PreprocessorCallbacks, DiagnosticsConsumer and CommentHandler
* fixed crash in IncludeValidation when only one source file was checked
Allows for defining specific target triple of architecture, vendor, OS and environment as set of dropdown lists
in CXX source group setup.
bug id = 370
* connects to https://www.sourcetrail.com/api/v1/versions/latest
* sends information about OS, platform, license type, current version and a unique user token
* Automatic update check is enabled via Startscreen and performed once every 24 hours on window focus
* Update check can be forced by clicking on "check for new version" on start screen
* renamed TimePoint to TimeStamp
fortune cookie message = In Träumen und im Leben ist nichts unmöglich.
* update JavaSymbolSolver to version 0.6.0
* moved to Javaparser 3.3.0
* fixed solving type parameter names in symbols solved in jar files
* implemented ignoring name contexts in javassist and jre based method signatures to break infinite recursion
* improved comment colors in all color schemes
* improved contrasts for dark color scheme
* fixed error locations stay visible when activating file in single file view
* removed scroll speed change listener from search autocompletion because it caused slowdown on macOS
* fixed bounding rects of graph edges to contain arrow
* fixed tooltip list shown with just one element
Before indexing the indexer commands are sorted according to byte size of the
indexed source file. Afterwards the list is split into two halves and each half
is shuffled. This ensures that bigger files tend to be indexed first, so that
no indexer thread runs idle at the end of indexing.
* set code font size as pixel value
* properly hide line number area for overview stats in both snippets and single file view
* fixed file title disabled for files in single file view in trial mode
* Tooltips show node type with access specifier, reference count and fully qualified name
* Fields and global variables include the type name
* Methods and functinos show whole signature. Gets broken into multiple lines if too long.
Included changes:
* Upgraded to C++14
* fixed clang warnings
* Pass location of .srctrlprj file to build.sh script to load on launch
* Split off QtCodeField for showing highlighted and annotated code fom QtCodeArea
* removed TokenComponentSignature
* added TaskDecoratorDelay
bug id = 195
* implemented this feature for both, CXX and Java
* adjusted tests to reflect these changes
* added NameElement and NameHierarchy to Java code
* created more specialized JavaDeclName classes: JavaFunctionDeclName and JavaVariableDeclName
* implemented recording static modifier for Java methods and variables
fortune cookie message = You will enjoy true success in whatever you do.
* moved storage related classes to data/storage folder
* implemented recording c++ unions as NODE_UNION instead of just using NODE_TYPE
* added transformation to merge anonymous classes/structs/enums/unions and typedef nodes
* added tests for this transformation
* added setting for enabling/disabling this transformation
* switched from using BOOST_159_DIR to using BOOST_DIR
* changed windows configuration of boost to remove requirement of duplicating all include files.
* add inheritance edges between parents of active symbol and other visible symbols
* add dashed inheritance edges when symbols are no direct decendants
* inheritance edges are also respected in layouting, putting base/derived classes in the correct top/bottom spot now
bug id = 167
* faster hierarchy cache building
* cache symbol definition kinds
* don't request files when caches can be used
* save SearchEdge by starting character in SearchNode to avoid iteration when adding to SearchIndex
* fixed disabled state of some search buttons
* fixed error columns are not saved to database correctly
* implemented setting JRE System Library paths in app settings
* added detector for JRE System Library that not use Java Runtime specified in AppSettings but detects JRE on its own by reusing the JavaPathDetector.
* added option to use JRE System Library in JavaSourceGroup
* moved SourcetrailPlugin to separate GitHub repository: https://github.com/CoatiSoftware/vs-sourcetrail
* changed Readme in ide_plugins folder to point to that repo and give instructions on how to install
* removed vsix from windows package
* renamed SourcetrailPlugin project to SourcetrailExtension
* changed assembly name to vs-sourcetrail
* removed plugin install script because the tests now use a configured experimental instance of Visual Studio
* added license file for cinder solution that is used in plugin integration tests
* replace license file with apache license
* added boilerplate notice of Apache License 2 to source files of plugin
* Show font size change as number not percent
* Show current graph zoom in label next to zoom buttons
* Fixed search blocks not properly updated when fonts size changes
* setting value for JAVA_HOME variable automatically before executing Maven if not found in system environment.
* show error dialog when maven encounters an error while fetching source directories from pom
* added logging when fetching maven source directories from pom
* changed windows installer to discard the first two digits of the version (17 instead of 2017)
* renamed vs plugin installer
* add game_object.h for TicTacToe to windows installer
* add eula.txt for eula window and keyboard shortcuts css to installer
* add eula and 3rd party licenses to windows install directory
* clear references count when clearing code view
* fixed scrolling to character in overview lists
* fixed aggregation activation shown in history menu
* fixed same snippet being added twice
* Sourcetrail [Trial] as window title
* fixed undoing trail expand will always reactivate symbol
* corrections in estimating size of intermediate indexer commands
* avoided clearing and refilling the indexed files list every time files get added
* changed memory growth policy of InterprocessIndexingStatusManager to double allocated memory when it gets full
* added potential to grow memory when adding crashed file paths
* reduced file open/close events while writing cdb
* fixed detection of header paths
* refactored Visual Studio extension code
* removed very old menu option for converting a solution directly into a Coati project (which would have been performed by Coati itself, not by the plugin).
* disable drop in qtlineedit
fixes bug where when file is dropped in the lineedit with text,
the the file will be added as text midst the existing text
* move message to start from script before layout loading so it will load right
(only when started without script on linux)
* center subwindow when mainwindow size changes
* added testsettings file that causes Visual Studio to use the current build of the
extension when running the integration tests. So no more uninstalling and installing
of the extension before running the tests.
* Show declname in java import error
* Don't clear window stack when saving preferences
* Fixed spacing in source group UI, status view and error view
* Resize graph scene rect when widget is resized
* Graph node centering respect no animation preference
* Fixed undoing of view commands
* Avoid scrollbar jump when restoring graph scroll position
* Deactivate local symbols in code when clicking into empty space
* Fixed annotations in code view when showing errors
* Fixed context menu hatched for non-indexed/incomplete file button
* Fixed file minimize button losing hover style when leaving to file bar
* Fixed only change bookmark button state when active node is bookmarked
* Fixed use bezier edges when expanding node on aggregation graph
* Fixed manually expanded nodes stay expanded
* don't try to resolve an import that ends in an asterisk. these can be either type names or package names and it it's a package we have no way to find out whether or not such a package exists.
* added SubWindow flag to QtWindow to either use window decorations or show window within main window
* fixes black borders in some Linux window managers
bug id = 376
fortune cookie message = Your skill will accomplish what the force of many others cannot.
* fixed solving import for statically imported member types
* enabled recording of fatal errors when an importing a type
* added AstVisitorClient for improved abstraction and debugging purposes
* using .Net framework version 4.6.1 in all projects
* implemented exception handling in VCFileWrapperFactory
* moved logging in separate assembly
* enabled logging in wrapper code
* reduced minimized file state to one-colored block
* added hover states to file buttons
* show hover state when hovering title bar
* fixed file button use for overview stats snippet
* Use unified showCodeSnippets method for setting file information on CodeView
* Made async initial file and snippet expansion synced
* Add ScrollParams API to CodeView
* Regard scope size when scrolling to definition
* Only use QtThreadedLambdaFunctor in QtCodeView now
* changed description text of Visual Studio plugin
* changed plugin install targets to include VS 2017
* add license file with MIT license
* updated vsix for deployment
* implement wrapper for all used classes of VCProjectEngine.dll since you cannot just use the oldest version of this
assembly (see https://stackoverflow.com/questions/44288050/typecast-fails-when-visual-studio-extension-uses-reference-to-older-assembly).
* improved serialization and deserialization of compile commands and compilation databases.
* updated used JSON package
* rename CommandObject to CompileCommand
* changed implementation to keep non-existent file paths in cdb
* made methods of SolutionParser non-static
* replace spaces with tabs
* added IntegrationTests project
* configured tests to simulate a new instance of VisualStudio
* added cinder as test project for integration tests
* remove all absolute paths from expected output of integration tests
fortune cookie message = A stranger will bring great meaning to your life.
* only show up to 1000 errors in table and code view
* click button in bottom right of error table to show all
* same error order in code and table
* highlight error line when switching reference in code view
* improved error view performance
bug id = 385
* Turned QtProjectWizzard into window for Source Group ui
* Clicking into FilePicker when empty will open dialog right away
* Fixed environment variable use throughout all Source Group path values
* Moved Preferences to QtPreferencesWindow
bug id = 230
fortune cookie message = Zwischen dir und deinen Freunden besteht echte Freundschaft.
* NameHierarchy now looks like this: <delimiter>\tm<all the rest>
* made new baseclasses for SettingsMigration and SettingsMigrator
* Use the migration system for SqliteBookmarkStorage as well
* handling all messages in parallel caused UI synchronization issues
* for now the only message that requests to be handled in parallel is MessageActivateTokens
* set unrestricted permissions on shared memory allocation to fix crash on Windows
* log exceptions during shared memory creation and destruction
* create SharedMemoryGarbageCollector after logging was enabled
* holding down back or forward button shows list of current back-forward stack
* added narrow button between back and forward to show the list
* added History menu
* moved back and forward actions to History menu
* show chronological list of recently active symbols in History menu
bug id = 151
fortune cookie message = Dein Geschäft wird gut laufen und expandieren.
* disable windows error dialogs on application crash for indexer target
* show indexing dialog at the start of indexing task instead of waiting for processes to start
* fix escaping path to binary for indexer process
* join garbagecollector thread when stopping
* fix compile errors related to FilePath in deploy mode on windows
* increased spacing around graph
* fixed graph lagging on message focus out
* fixed level assignment fails
* fixed dead ends in cyclic graph removal
* improved node positioning by grouping to same average position
* fixed graph image export not centering graph
* fixed black dot at graph origin
* show status updates while creating trails
* TaskBuildIndex starts seperate indexer processes and communicates via shared memory
* indexer processes get restarted if they fail
* indexer processes are killed when the app closes or crashes
* added utility class SharedMemory to allocate and access shared memory, providing basic data structures
* added SharedMemoryGarbageCollector for keeping track of running instances and cleaning up shared memory in case of a crash
* show errors for source files that crashed during indexing
* added basic exception handling to task scheduling
* added option to turn off processes and use threads in preferences, but still use shared memory
fortune cookie message = Good news from someone dear is coming soon.
* use canonical filepath cache in cxx indexer
* made constructors of FilePath explicit
* use FilePath at more places instead of string
* forward declares FilePath wherever possible
returning a bool seem to cause a seg fault on the linux 64 bit builder
since it is not used anyway i changed it back to the void return.
(dont know why it is a seg fault)
* added icons to buttons
* added toggle for collapsing and expanding controls
* added controls visibility to app settings
* fixed low contrast for disabled buttons in bright color scheme
SourceGroups have been initialized with wrong default values which
have later been used to write for writing the ProjectSettings file
if not overwritten.
* moved bookmark buttons behind search bar
* suggest qualified name when creating, file name for files
* fixed bug when updating bookmark category
* changed comment toggle arrow
* changed edit and delete icons
* fixed undo for edge bookmarks
* keep categories always alphabetical regardless of subsorting
* keep category expansion state when opening and closing browser
* removed QtBookmarkBar, moved logic into QtBookmarkView
* added bookmarks Menu with shortcuts
Ctrl + D: Create Bookmark
Ctrl + B: Bookmark Manager
* Added TrailLayouter with Sugiyama dependency layouting
* Layouter supports horizontal and vertical layouts
* Added basic ui to graph view for showing incoming and outgoing paths
* Added depth slider, with infinity at maximum
* Disable trail ui when not available
* Added trail messages to undo stack and only use last one when undoing
* Added QtGraphLineBezier for trail graphs and refactored other line types
* Disabled edge activation for trail layouts, shown only visually
* Highlight all connected edges when hovering a node in trail layout
* Use different color when highlighting call edges for better contrast
* Fixed BucketLayouter issue when edge does not leave node
* Increased click area for angled edges
bug id = 249 337
fortune cookie message = Answer just what the heart prompts to you.
* implemented handling of aggregations in bookmarks
* split index Storage and bookmark storage
* each sqlite database has its own version now
* added bookmark tests
* fixed creating bookmark tables when project can be loaded but bookmark db does not exist
* fixed font size for bookmarkview tooltips
* using bookmark cache now
* using default category name when none specified by the user
* raising bookmark windows when they should be shown
* clearing a bookmark or category in the editor will now update the star icon accordingly
* non-persistent bookmarks use ids of nodes and edges now (instead of names)
* git ignore .srctrlbm files
* mark all files with errors as incomplete
* fix incomplete label in codeview tooltip not updated properly
* added setting for canceling indexing for files with fatal errors
* avoid AST traversial for CXX translation units with fatal errors
* save all files within those translation units as incomplete
* show number of complete files in finished indexing dialog and overview stats
* display incomplete files hatched in graph view
* display incomplete file titles hatched in code view
* mention file incompleteness in tooltips
* removed derived Indexer classes and set ParserType via template parameter instead
* moved getSourceFileFromCDB from IndexerCxxCdb to IndexerCommandCxxCdb
bug id = 358
* fixed NameHierarchy delimiter not set when project settings need to be migrated
* fixed codeview does not scroll to linenumber in single file mode when activating symbol in changed file
* fixed snippets added twice on token reactivation for errors and fulltext search results
* fixed colorscheme gets refreshed when cancelling preferences
* scroll to first line in errors table after indexing and showing view
* fixed file not properly expanded when snippet covers full file
* fixed project type naming in project setup
* fixed set delimiter of NameHierarchy for projects that can't be loaded yet
* changed language order for project setup
* fixed - to _ in color schemes
* fixed yoda talk in Tutorial
* fixed graph node with no children but qualifier has expand toggle
* added placeholder and file filter for maven detection on MacOS
* fixed NameHierarchy delimiter wrong in SearchIndex
* project can not have multiple source groups with different types
* language of a project is now inferred from source groups
* setting global NameHierarchy delimiter of first sourceGroup in project
* added project settings migrations for source groups
* Add Settings Migration classes (MoveKey, DeleteKey, Lambda)
* Update sample projects with migrations
* added method to config to retrieve sublevel key names
* implemented recursive removing of keys in settings
* moved project files out of top level
* removed solution parsing code as it is not used anymore
fortune cookie message = The secret of getting ahead is getting started.
* fixed window size and resizing
* fixed layout and spacing
* removed focus rects on Mac
* fixed filter dropdown style for Mac
* reuse button handling from QtWindow
* use different colors for category and bookmark rows
* allow clicking full row for expansion
* show edit and delete button only on hover
* ellide bookmark name when little space
* update to use JavaSymbolSolver 0.5.2.x (fce40b67)
* update to use JavaParse 3.1.2 (4537e57a)
* implemented solving constructor calls instead of just recording a type usage here
* fixed window size and resizing
* fixed layout and spacing
* removed focus rects on Mac
* fixed category dropdown style for Mac
* reuse button handling from QtWindow
* updated QtBookmarkBar buttons to new icon creation
* Store MessageActivateTokens instead of original view messages
* Renamed FeatureController to ActivationController
* Remove all non-activation messages from undo redo stack after reindexing project
* Added MessageShowReference to undo redo stack
* Added MessageScrollGraph for restoring graph view scroll position
* Fixed MessageGraphNodeMove not saved for bundles
* Refactored tokenIds and nodeNames in SearchMatch and MessageActivateTokens
* Refactored SearchController
* Fixed file expansion on undoing/redoing after switching code view mode
* Fixed redundant graph animation due to present qualifier nodes
* Fixed no restoring of graph node expansion when showing overview in between
* added option to create a Coati project from a Maven POM file
* show list of indexed file paths in maven project setup
* use FileManager to detect indexed files in project setup (except cdb)
* added Maven path to preferences window and added path detectors.
* fixed: QtDialogView::hideStatusDialog now also hides loader in status bar.
* refactored ProjectType
fortune cookie message = If you continually give, you will continually have.
cdb data will now be written to file immediatly instead of stored and then written all at once
this might solve memory issues for very large projects, but also increases parsing time (added concurency)
* replaced parser arguments by project specific IndexerCommands that know everything the indexer needs to know to do its job
* added different language and project specific indexers that know how to handle a certain kind of indexer command
* refactored FileManager and FileRegister to have less overhead
* removed no-rtti restriction for clang files in lib cxx
* uncommented deprecated interprocess code.
fortune cookie message = Happiness will bring you good luck.
* removed special treatment of anonymous symbols when retrieving their source location. Now their source location is just the "{" character at the start of the namespace's scope.
* reduced contrast for overview bundle starting character titles
* put 3rd party licenses into Mac bundle
* check edges for 'importing files' bundle as well in case node types are not set
* Support environment variables in compilation database path
* Moved advanced option (compiler flags & exclude paths) to separate dialog
* Allow environment variables that contain multiple paths
* Renamed 'Project Name' to 'Coati Project Name'
* Renamed 'Project File Location' to 'Coati Project Location'
* Renamed 'Project Paths' to 'Indexed Paths'
* Make all paths chosen by path picker relative to the project location
* Disabled name and location changing in project editing and removed project moving
* Added sub-titles to project setup dialogs
* Warn user when no Indexed Header Paths were set
* Deprecated lazy include search: It's only useable and visible to projects holding the key
* Split default file extensions for C++ and C
bug ids = 234 254 283 293 312 335
* Use const references in Traverse methods of CxxAstVisitorComponent
* Only record symbol kinds of name specifiers within project files
* Moved main file check in within unindexed project file check
* update to clang/llvm to 3.9
* update to qt 5.8
* fixed windows javapathdetector for 64 bit java.
* added LibGui as dependency to tests
* fixed legacy Java 6 install necessary on MacOS
* fixed setting of user path for 64 bit build
* added missing pngs to windows installer
* renamed graph zoom button images
* reverted moving of setupLogging call to fix crash on deployed exe
fortune cookie message = An old acquaintance will enter your life.
* overview bundles imitate style of bundled node type
* removed bundle for built-in types
* show contents of overview bundle in vertical list layouted with new ListLayouter
* nodes starting with the same letter are grouped with the letter displayed above
* pressing the letter key will scroll to the group
* also use this list layouting for namespace & package contents
* renamed BucketGrid to BucketLayouter
* moved used functions of GraphPostProcessor to GraphViewStyle and removed GraphPostProcessor
fortune cookie message = Don't be afraid to take that big step
It was not checked whether Coati is unlocked when refreshing an edited project. So users could change one of the sample
projects manually to index their own source code.
* renamed DefinitionType to DefinitionKind
* passing DefinitionKind from Java to C++ instead of just a single bool
* omitting to create a symbol for undefined types
fortune cookie message = Happy news is on the way to you.
* refresh also clears referenced (included or imported) files if they are not part of the project's source files and are not referenced by any other unchanged file anymore.
* fixed detection of environment variables in path that are encapsulated in %VARIABLE_NAME%
* mentioned notation for environment variables in documentation
* Added navigation to top of code view for iterating references and switching between list and single file mode
* current file name and reference count is shown on top in single file mode
* refactored scrolling to location or line via request system
* added parameters animated and toTop to scrolling system
* refactored class hierarchy and removed unused stuff in list mode
* moved sample projects from data to user folder
* added fallback files for app and window settings
* implemented copying app and window settings to user folder when not found on app startup
* fixed upgrading for windows installer
* Elide status bar messages to avoid window resize window
* Fixed status view clearing when switching projects
* Refactored app setting loading
* Replace newline characters with spaces in status view
* click message in status bar to show status view
* renamed status tab to output
* renamed status column to message
* fixed list not properly updating when using filters
* scroll to first row after clearing
* Fixed sorting to always be alphabetical within each bucket
* Bundled nodes will expand in place
* Overview bundles are not sorted alphabetical
* Probably improved sorting performance by using std::set
* in vector testsuite replaced EQUAL with DELTA for float comparison
* on linux use appsettings for testing
* botan deprecated warning
* template error in cxxtest
* increased gap in code_tutorial_3.h so that next comment is not already visible
* Fixed SearchMatch sorting to not loose matches with same name but different namespace
* Fixed crashes when pressing return and only ? or ?? was entered
* Fixed "Find Symbol" after "Find Text" will remove the ?
* Do fulltext search when no match was found for the entered text
* Select current matches when using "Find Symbol"
bug id = 251
* Checkbox allows for switching between refresh and full refresh
* Renamed menu option Force Refresh to Full Refresh
* Checkbox is not visible when project needs to be fully refreshed
* added clang flag to continue indexing, no matter how many errors have been thrown.
* changed parser to insert custom compile flags after the default ones set by coati so that the user can override these.
* made header and excluded filepaths of filemanager canonical
* implemented solving Attributed- and InjectedClassNameType
* handled clang returning null objects in NameResolvers
* Moved error filtering to PersistentStorage
* Fixed wrong error count in statusbar and dialog sometimes
* Make sure error tab is visible when showing Log View
* Don't show error view when no visible errors are added
* Added arrow indicating namespace and package name on left side of node
* Show namespace label when hovering arrow
* Activate namespace when clicking label
* New design for namespace nodes
* verbose ast visitor logs the file that is currently visited.
* fixed crash in log controller
* fixed crash when solving the name of an anonymous element that has no valid location
* recording of usages of FunctionProtoTypes (e.g. "int(void)" can be used as a template argument)
* implemented solving names of dependent template specialization types (these are not as bad as it sounds ;) )
* implemented correct solving or decayed types
* fixed: qualified type usages are recorded in the correct context
* changed cxx indexer tests not to crash anymore when something is not found
* fixed potential crash when solving decls in lambda captures
* fixed solving type of anonymous structs/classes in c code
* added null checks in name resolvers
* added classes that represent different name kinds
* rewrote NameResolvers to return the new name classes instead of NameElement and NameHierarchy
* removed DataType classes since their functionality moved to the CxxTypeName class.
* fixed bad search performance when rescoring
* fixed commands had no text in autocompletions
* no autocompletions when entering fulltext search query
* check query actuality before processing autocompletions
* moved source code for solving names of NestedNameSpecifiers to new CxxSpecifierNameResolver.
* implemented recording of UsingDirectives.
* implemented using file as context for using directives and using directive decls if no other context is available.
* re-implemented recording of the auto keyword
* implemented showing dialog for database injection
* implemented easy-to-read way of creating behavior tree structures
* moved injector wait logic out of injection task
* revised check for visiting a referenced type or decl
* calling client->onFileParsed everytime a file gets processed by the Preprocessor so we can create valid locations in that file
* created test for detecting a usage of a member inside a CallExpression context
* added method to consume a context based reference kind in the AstVisitor
* removed old AstVisitor
* added new implementation called CxxAstVisitor
* added CxxVerboseAstVisitor that may wrap the CxxAstVisitor to log the AST while visiting
* added the same structure for the Java visitors
* removed all the logs that were fired when recording stuff
* Added UI setting for verbose indexer logging.
* implemented AST name obfuscation for Java and Cxx
* unified test visitors for Java and Cxx
* implemented recording using directive decl
* removed most of the old onXxxParsed methods
* Show namespace or filepath in second line of search autocompletions
* Add filepaths relative to .coatidb location
* Rescore matches to acknowledge line split
* Fixed SearchMatch type to be drawn always visible at right edge
* moved installer dlls to lib folder
* updated .gitignore to be more specific
* added notes on cleaning the installer project to readme
* made rebuilding of databases optional in windows deploy script
* removed local paths for devenv.com from windows deploy script
* Added TaskParse as base for TaskParseCxx and TaskParseJava
* Fixed increment and decrement of indexer_count on blackboard not atomic
* Fixed TaskInjectStorage finished before TaskParse started
* Fixed project not cleared when refreshing on now empty project
* Fixed TaskInjectStorage overheating when nothing to do
* Fixed crash on undoing aggregation edge
* Avoid mutex locking in logging classes when logging is disabled
* Readded dark color scheme
* Fixed font size of type label in autocompletion list
* Fixed text drawing in autocompletion list
* Only give camelcase score when no noletter score was given
* Added MessageShowErrors to undo stack
* Select error line in table when undoing MessageShowErrors
* Notify user about new Plugin in description of From Visual Studio project setup
* Fixed row height of Project File Location label in project setup
* updated jars for JavaSymbolSolver for windows to version of commit b7b2efe2
* removed tests that don't work anymore (because they need files on the file system)
* polished color schemes for error view
* fixed error id column not hidden
* fixed error count shown correctly in each view
* moved storage stats logging to application
* fixed indexed flag of errors broken for indexed headers in cdb project
* fixed scrolling to active error when errors where not visible before
* reverted tictactoe files to no errors
* when Coati is started with no java-path or global cxx header or framework paths in the appsettings they are auto-detected using the first working detector
* order in which the detectors are shown in gui now matches the order they are added to the combined detector.
* smaller indexing progress dialog with bar in the middle instead of golden ratio
* set default code snippet expand range to 3
* no minimum height for project file location element in project setup wizard
* move aggregation and inheritance edges to front when hovered or active
* push parent nodes of active nodes to back to make edges to the active child visible
* properly quit application when window is closed while confirm box is open
* properly quit application when window is closed while indexing
* only count top level nodes for count on bundle nodes
* give noLetterScore to index 0 in search index scoring
bug id = 121
* changed the name resolution of generic type instantiations to use the name of the type's declaration instead of using the provided type arguments here.
* fixed tests
* Define exit state for TaskRepeatWhileSuccess
* Added TaskFinishParsing to end of parsing task sequence
* Also measure time spend clearing files in total index time
* added setting for maximum memory allocated by JVM to Preferences window.
* a value of -1 ignores this setting
* changed default value for this setting to -1
* increased JNI version to Java 1.8
* disabled some file system tests for windows
* moved waiting from TaskInjectStorage to TaskGroupParallel so that the tasks that run here have the same conditions as tasks running in the TaskScheduler
* reimplemented interrupting TaskParseCxx by adding a listener for the MessageInterruptTask and returning a failure status code on update. This cancels the parent sequence task which results in the indexed items not getting inserted into the persistent storage
* removed the capability for interrupting from TaskScheduler
* changed task system to be closer to the standard behavior tree implementation
* changed task system to accommodate the 3 status return types: Running, Success and Failure
* made TaskGroupSequential fail once a member task fails
* made TaskGroupParallel fail once a member task fails
* split TaskParse... into one task for indexing and one task for injecting
* added TaskRunner that handles updating and resetting the managed task
* fixed numbers that are shown as parsed file count in indexing ui
* fixed deadlock that originated from interaction between TaskScheduler and MessageQueue (one thread wanted to destroy a message listener on a task while the other one wanted to send as message as a task)
* revised texts in application preferences and documentation to state the currently required Java version
* update deploy script on windows to use UPX with "--best" instead of "--brute"
* added javaparser.coatidb to app setup project
* clearing javaparser.coatidb before building it in headless more for deploy
* added all plugins to windows deploy script
* implemented a dynamic way (that does not involve the linker) to load the Java runtime library
* implemented JavaPathDetectorLinux
* Filepicker for Java runtime library now asks to pick JVM library instead of folder
* extended error handling for JavaEnvironmentFactory
* revised texts in project setup ui
* fixed crash during project setup when CDB file is empty
* fixed row height of project location in CDB project setup
* changed help texts
* use help buttons instead of descriptions in dialogs
* fixed show files button not up-to-date with directory list box
* fixed source file extensions shown in cdb setup
* refactored size and content setting for project content classes
* adding folders form source paths to header search paths for convenience. We are using system header search paths here so that users can also use "<..>" in their includes.
* moved creation of java environment factory to build index method. This fixes a bug where project refresh was not working when setting the java path after loading the project.
* added javaparser as sample project
* fixed crash in utility::isPrefix when prefix is longer than the actual string
* fixed crash when inserting a meta value that contains a special character
* added "language" to project settings of tutorial
* changed separators in serialized name hierarchy
* added javaparser project to windows installers
* enabled the checkbox for start menu shortcut in installer by default
* removed autorefresh icon
* removed JavaSmallTest project
* Added version number to ApplicationSettings
* Added SettingsMigrator for defining migration rules for different ApplicationSettings versions
* Migrate ApplicationSettings when loading
* implemented a more generic approach to detecting filepaths
* reimplemented standard header detection using this approach
* added auto detection of JVM dynamic library on windows
* fixed java tests that were broken when updating the java_indexer project before this commit.
* Added DialogView with QtDialogView implementation to handle information dialogs
* Implemented QtIndexingDialog class that covers all different dialogs for indexing
* Directly communicate with DialogView from Prpject and all Tasks involved in indexing
* Block QtMainWindow UI while indexing
* implemented java will not be used if it is not found on system
* add jni libraries weak linked for Mac
* use dlopen for lazy library loading
* added java path to preferences
not found jars or classpath items are not handed forward to the java indexer because the java code throws exceptions when attempting to create a jar type solver for these.
* Added class QtTextEditDialog for displaying text content
* Added edit button to QtDirectoryListBox
* Replaced show files button dialog using QtProjectWizzardContentSourceList with QtTextEditDialog
* Added language specific Project and ProjectSettings
* moved project specific code from Application to Project
* made Application a singleton
* added handleDialog method to Application which displays a dialog window and waits for user input
* Added ScopedFunctor that executes a function when deleted
* Added new class QtCodeNavigator between QtCodeView and QtCodeFileList that handles active ids and navigation
* Pass all files as initially collapsed to code view and decide in QtCodeNavigator which ones show content
* Rewrote requesting of active snippet display to top down approach
* Display other locations focused when active location changes
* Show corresponding edges when navigating references
* expanded appsettings to include java specific stuff
* added java indexer as separate project that can be build via its build script
* added dependencies for java indexer to the setup folder
* added license files for these dependencies.
* added sample project for java. this is just to test java on other machines and can be removed again in the future.
* the java parser test suite is currently uncommented because java is not running on every machine.
* added some more node types
* removed TokenComponentAccess::AccessType and replaced all its usages by using AccessKind
* moved access components from edges to nodes
* using recordReference of ParserClient for java
* removed recording access specifier of inheritance edges.
* added styles for new node types
Scrolling to line, when comming from plugin and the file is was modified.
Since there we dont know from the position data if the symbol on position is the right one,
we scroll to the line if modified.
* deprecated the third version number as storage update number
* version can now have either 3 or 4 numbers
* whether a .coatidb file is outdated is now solely determined by the SqliteStorage::STORAGE_VERSION
* show custom icon for size grip
* add small margin at bottom of windows to show full shadow on Windows
* remove color_scheme_test keyword from autocompletions
* commented failing vs solution parser tests
* QtContextMenu holds default actions for back and forward
* additional actions can be passed to extend the default menu
* currently used in QtMainWindow and QtCodeArea
* fixed crash on undo when only view actions happened since project load
bug id = 108
* Fixed CPPSqliteException being thrown due to not properly destructed statement in addError
* Fixed indexer getting stuck after building caches because MessageFinishedParsing was interrupted
* removed Message::cancel() method and all related code
bug id = 105
* removed save actions from menu in QtMainWindow
* removed MessageSaveProject and all Listeners
* updated project loading to ask whether old project and db file should be kept at old location
* fixed crash for missing include files
* fixed simple header search within source paths was broken
The global header search paths were sorted alphabetically after detection due to checking for uniqueness. This caused
problems with #include_next directives in certain std header files that relied on the correct header search path order.
bug id = 101
* define TRACING_ENABLED in utility/tracing.h to enable tracing
* invoke TraceEvent by writing TRACE() at start of function or scope
* provide an event name with TRACE("name")
* press SPACE to show collected traces history and report with accumulated times
* added separate step for project name, project location and cdb path
* added description that project stays up-to-date under cdb path picker.
* added include and framework paths to advanced settings
* disregard source extensions for cdb projects
bug id = 70
* only randomize parsing order of source files for multithreaded indexing
* fixed overview not displayed when switching projects due to MessageScrollCode being dispatched
* avoid adding duplicate TokenLocations that causes highlighting to break in QtCodeArea
* clear all controllers when switching project
* maximize unindexed file when clicking title instead of activating it
* delete test.sqlite in storagetestsuite in desstructor
* remove new and delete from suffixarray
* case sensitive fts
* fixed fulltext results annotated like errors
* lazy suffix array building
* fulltextsearch folder added
* go back too branch without _publish
* suffixarray working
* logic: Improved code view performance
* changed ***FileIsUnparsed in FileRegister to disregard files that are currently parsing.
* made Cach more generic by adding the option of providing a custom hasher
* added sql index for component_access
* improved policy for expanded code files
* reduced amount of initially expanded code files
* faster DummyEdge creation
* faster DummyNode search by token id
* switched GraphController DummyNodes and DummyEdges to shared_ptr for memory safety
* fixed crash when snippet has no code.
* fixed crash when saving a filenode with special characters in its name
* fixed crash when aborting the parsing
* added option to define the amount of parallel indexers in the appsettings
* fixed unparsed files query in ASTVisitor
* fixed: to update a node's type in the storage the node does not have to be defined anymore
* modified the TaskParseCxx to be able to run multiple times in parallel
* made FileRegister threadsafe and changed a lot of its mechanisms
* added TaskGroupParallel that runs all children in parallel
* added TaskParseWrapper that acts as a decorator to execute some code before and after parsing.
* implemented task setup in project with 4 parsing threads
* removed SimpleTask as it was only used as interface for the LambdaTask
* renamed Storage to PersistentStorage
* added Storage as baseclass that implements data injection
* cleaned ParserClient interface
* added default constructors for storage types
* cleaned SqlteStorage by implementing the private getAll methods as template specializations
* added CXX flags to CMakeLists (this is needed for sqlite with visual studio)
* removed TestStorage.h/.cpp since these files were not used anymore.
* fulltextsearch enabled in sqlite
* fulltextsearch start search with @
* codeview performance improved
* strip sRGB profile from png files to get rid of libpng warning at runtime
* fixed size policies of codeview elements to prevent the codeview from having a global scrollbar
* fixed crash in sorting of search results
* removed debug log when panning a codesnippet
* updated color scheme highlight colors
* fixed highlight color resetting
* prevent project file being save with no changes
* fixed MessageListener crash due to alive flag being set too late
* new edit project icon
* fixed deleted project could still be selected in the recent project menu
* fixed project file not loaded when declining for reload
* fixed main in tutorial description not clickable
* fixed clang warnings
* fixed commands not showing up in autocompletion
* fixed classes were expanded when activating aggregation
* fixed crash when messagelisteners tried to unregister after messagequeue was destructed
* FilePath::relativeTo(...) did not return correct results for non-canonical paths (for a base path containing "/foo/.." it would prepend "../" two times instead of omitting it).
* fixed bug where panning stopped when hovering the line number area in the code view.
* when relasing the mouse button on a clickable code location after panning the location is not activated.
While the message box with the question is visible the ui is blocked. A message appears when:
* when project was edited
* when preferences were edited
* when project file has more recent changes than db
* when db has a different version than Coati
* Enabled automatic scaling for high dpi systems that has been introduced with qt 5.6. This is only a temporary solution. We should change the ui code to use only em scales instead of pixels.
* added SymbolType that can be used by ASTVisitor and ParserClient
* reordered some of the ParserClient's methods.
* removed return type of ParserClient methods.
* removed redistributable as prerequisit from installer
* added merge module for these dlls to the installer
* added "my_next_step.h" for the tutorial project to the installer
* renamed visual studio plugin
* updated deploy_windows script to use vs14 to build the installers
* mix command and token results
* tweaked scoring
* added scoring for matched letters after non letters like _
* increased performance by removing separate sort step using single results vector in recursive search
* made sorting alphabetical: A < a < B < b
* added recording of references to the ASTVisitor.
* refactored reference recording in ASTVisitor.
* merged all the onXxxUsageParsed methods of the ParserClient.
ORDER_ACTIVATE for messages that change active symbols
ORDER_ADAPT for graph and code view expanding and collapsing
ORDER_VIEW for scrolling and local symbol activation
* regex removed in hook since it was not working on windows.
* fixed method for getting the script's path for windows. using this in setup and clean script.
* fixed missing include in cmakelists
- moved LicenseChecker from App to Lib project
- added MessageDispatchWhenLicenseValid. This message takes another message as an argument which is dispatched once the LicenseChecher confirms the current license key or (if the key is invalid) once the user entered a valid key. This message is used when messages are sent that should not be working when no license key has been entered (LoadProject or ActivateTokenLocation via the IDE communication).
- added MessageShowStartScreen which makes the MainView display this screen. This message is also sent via the MessageDispatchWhenLicenseValid.
- removed startup project from appsettings.
* label errors as errors instead of references in file snippet headers
* show number of fatal errors in file snippet headers as well
* only show the first 10 error snippets open, remaining collapsed
* don't show status message after parsing in red on errors
* don't show stats of parsing when project was only loaded
- added local symbols to storage
- added tests for local symbol parsing
- added MessageActivateLocalSymbols to activate local symbols in code view
- TokenLocations now store their LocationType instead of a plain bool "isScope"
- moved LocationType from TokenLocation to separate file, since it is also used in Annotations now.
- added local_symbol in stylesheet to define a style for hovering and activating these elements
- renamed location to token in stylesheet
* show namespace name in search view when activated
* show namespace definitions in code view when activated
* no children in namespace
* no implicit nodes in overview or namespace
* Show a maximum of 10 open snippets
* Fixed bug causing nodes in GraphView to be stacked at 0,0
* visit implicit declarations in ASTVisitor
* show implicit and undefined child nodes only when connected
* fixed some bundle edges couldn't be split
* add "implicit" to tooltip
* show undefiend and implicit nodes hatched
* moved detection files to lib_gui
* added ui to global header search and framework search ui in project wizzard and preferences
* detecting the search paths will add them to the list if not added yet
* only detected compilers are shown in the dropdown list
* added different routing options for horizontal, vertical or any
* added different pivot options to connect in the middle or at thirds
* changed aggregation to angled edge with thickness logarithmic to weight
* aggregation to pivot at middle and route any direction
* aggregation weight displayed in tooltip
* inheritance to route vertical
* replaced the implementation of the search index. the search index now uses a search-trie. edges have gates that can be used to check if a character can be matched when following the edge.
* SearchMatches now have a text and a list of NameHierarchies that share this node (instead of Ids, so that nodes must be found by names (which makes sure that SearchMatches are still valid after refresh).
* when parsing a project's description the CodeController now looks for NameHierarchies instead of SearchNode names to find ids of linked elements.
* moved the menu entry for "recent projects" to be placed close to "open project"
* replaced enum for MaxRecentProjectsCount in AppSettings by a getter function.
* storing the information if a node is defined implicitly in the database
* the analysis however does not visit implicit nodes directly. Currently they are just recorded when used somewhere in the code. This should be changed once implicit nodes are hidde in the UI.
* removed error logs for unnamed template parameters and function parameters since it is ok when they are anonymous.
* rewrote searchnode to use map
* added local cache for parent node ids when creating the Hierarchy Cache.
* added indices to SqliteStorage to increase code view performance.
* moved inserting everything into the database to the end of parsing a file. this reduces many duplicate queries.
* removed ParserClient interface from Storage.
* errors are updated after parsing a file because we only if there are any duplicate errors after merging the new errors into the database.
* renamed field in db
* added fatal column to error db
* Added CDB option to project type selection
* show CDB source files in popup
* define header paths separately
* made generic content summary in wizzard and use it everywhere
* fixed file paths not canonical in analysis
* refactored wizzard content paths to use summary instead of subpaths
* refactored files popup to simpler communication with content
bug id = 35
switch from qt to boost commandlineoptions
coati can now parse a coatiproject without gui with commandline flag -d
show all commandline options with flag --hidden
* removed unused code: ParseFunction, ParseVariable and ParseTypeUsage. All this is handled using NameHierarchies now.
* Moved the getErrorCount method from ParserClient to the StorageAccess
* MessageFinishedParsing doesn't know the error count anymore.
* StatusBarController now has a StorageAccess to fetch the error count when needed.
* improved context detection of template parameters.
* fixed case where declaration and definition of template function has 2 nodes in graph.
* removed code duplications: replaced individual cache classes in ASTVisitor with template based
* unused member in undoredocontroller
* int - size_t comparion
* virtual destructor ASTVisitor added
* braces when && and || in same if
* 1 warning left: isNamedDeclUnnamed in ASTVisitor is unused
Message by the ide com. controller are now caught by the licence checker to prevent them from causing trouble when waiting for the licence.
bug id = 45
Catch exception when coati tries to write to a database without sufficient rights. Display error message asking for restart with admin rights
bug id = 43
* hide build file content
* use small buttons in all windows
* new design for start screen
* fixed design for enter license ui
* added spacing to summary
* brighter icons in wizzard
* added template icon for graph
* smoothing for graph icons
* switched error icon to dot
* fixed error message tooltip immediatly disappearing
* menu item for opening documentation
* When a location is clicked in the code that has more than one TokenLocations pointing to the same element, only one instance of the element is displayed in the search bar.
* stretch at end of preferences
* space at scrollbar
* default font size
* only refresh project when something changed
* fixed sizing of text fields
* icons fit to font size
* use em base sizes
* added language to project type label
* switched to QGridLayout for wizzard content layouting
* distinguish scrollable windows based on content
* content can define window size
* removed QtApplicationSettingsScreen, now done via QtProjectWizzardWindow and QtProjectWizzardContentPreferences
* added new project icon
* compilationdatabase cleaned
* add SolutionparserCompliationDatabase
* added cmake_build_type_init as release for better autocomplition on linux
* external source handling for different linux versions
* clean script remove windows symbolic links only on windows
* linux external lib handling for different build easier
* removed blurry coati background
* added language selection to project type window
* search for headers in project paths option as part of simple setup
* show popup containing list of all analyzed symbols
* show build file path in summary and allow refreshing
* only force refresh after editing project and something changed
* Window title now reads "Coati - Project name".
* Removed file endings in the recent projects list.
* Changed the first line of the project summary to be "Project: Project name" instead of just "Project name".
* increased performance. coati is now 1.55 times as fast as at version 0.4
* integrated sourceweb parsing code
* removed astbodyvisitor
* NameHierarchy now store signatures in a new format
* storage does not allow to re-set the type of a node, once it is marked as "defined".
* made onTemplateRecordSpecParsed just create the edge, not the node.
* removed distinction between template specialitzations for functions and classes
* adjusted the start of the tutorial to work with the "overview" filter.
* fixes some spelling errors in the tutorial.
* tabs can be encoded by "\\t" in the project description.
* QtProjectWizzard handles window managment logic of project setup
* QtProjectWizzardWindow is used in every step and displays QtProjectWizzardContent
* QtProjectWizzardContent is the base class for all differnt content types
* Removed Singleton from ProjectSettings
* ProjectSettings are created by wizzard and QtProjectWizzardContent can access and load
* added project type selection at start of wizzard
* added summary at end of wizzard
* show global search paths in setup and summary
* fixed layout problems after font switch
* fixed scrolling and resizing of QtDirectoryListBox
* separated QtLocationPicker to own class
* Licensegenerator can now generate any type of license via commandline argument
* When moving the appliction, the user needs to enter the License again
Can now parse visual studio solutions. VS Plugin can send a command, parsing is implemented in Coati.
Some minor changes: added project file icon, added language check to vs plugin
* move top and bottom layout buckets closer to center buckets
* split undefined bundles into users and usees
* acknowledge zoom for graph view size in layouting
* bundle all referencing nodes
* fixed bundle node and bundle edge count
* Show scope name at bottom looking like top one
* Refactored CodeSnippetParams out of CodeView and use them everywhere
* Fixed border radius clipping problem at bottom of file by defining a small padding
* Scroll to line number when inserting a scope
* hide start screen when opening with project file
* added project icon file to bundle and file type association to plist
* listen for file open events from double click or drag and drop
* fixed crashes in window handling
* expanded setup script to create symbolic links
* expanded clean script to remove symbolic links before deleting contents of Debug and Release folders.
* fixed lines in tutorial so they don't exceed the limit of 80 chars.
* added access node to graph for template parameters, no icon so far
* don't reexpand function nodes with children when active before
* removed console warnings for edges
* when generating the name hierarchy of a template parameter the parameter name is now an extra element that follows the template class/struct/function element.
* Include paths are converted to a canonical version before they are tested for being in the project files. Therefore non-canonical include edges will be stored by Coati as well.
* show analysed nodes as bundles in graph
* ellide node names longer than 50 chars
* sort nodes alphabetic in these bundles
* show stats of analysis in code
* error are displayed as well in overview
* added keywords overview and error
* project description can be set in .coatiproject file
* description can include links to symbols using [symbol] syntax
* updated documentation
* increased toc nesting in documentation
* added target for the license lib.
* switched to statically linked version of boost.
* removed boost dlls from bin directories.
* cleaned up CMakeLists.
This change integrates the license key ui into the application and makes it necessary for the user to enter a correct
key. The check for a correct key is done on startup and whenever a project is loaded. The check for the key also
includes a check whether the location of the application has changed.
* implemented saving project settings force-refreshes the project if something has changed.
* when nothing has changed while editing the project settings, the project is not refreshed anymore.
* new project window is cleared now before it is displayed.
* log messages as they are sent and received
* log information about messages by overriding method print()
* reduced logging of autocompletion list
* removed log location from message and parsing logs, as they are known and make up 90% of logs
* re-added gui for c project setup
* ASTVisitor now visits RecordDecls instead of CXXRecordDecls
* prevented endless recursion when parsing struct that is defined in functions signature.
* improved the way of gettig a TemplateSpecializationTypeLoc from any TypeLoc to parse template arguments.
* fixed wrong forward mouse button code in app settings.
* the key codes for mouse back and forward buttons can be defined in the ApplicationSettings
* fixed only left mouse button allowed for graph interactions
* fixed warnings for overriden node and edge colors
* fixed warnings for edges connecting the wrong node types
* removed tool tip from color scheme
* changed names in project setup screen
* functions will only display their names in the graph view. hovering the nodes shows the signature as a tooltip. However, nodes in the database will be created and used regarding their signature.
* improved lambda handling. All calls to generated lambda functions (constructor, call operator) will now point to the lambda class instead.
* implemented handling of the "auto" type.
* improved the CxxParserTestSuite to use function strings instead of function names for template related functions.
* reverted to old source location retrieval for CxxConstructExpr, because source locations were outside file
* removed exisiting source location check for better performance
* fixed CXXParserTestSuite to use c++11 standard
* fixed crash on missing signature retrieval
* implemented handling lambdas as functions
* functions can have child nodes now
* NameElements in NameHierarchy can have signatures now.
* fixed crash that occurred when message listener was used while being half way through its destruction process.
* now Coati will also parse the body of an instantiated template function and follow calls to other template functions there.
* Coati will parse template arguments at the point of implicit or explicit template instantiation and explicit template specialization.
* refactored template handling in storage.
* added a ? button to the labels of the directory list boxes to show help messages
* added a window stack to QtMainWindow for easier screen handling
* added a button to the preferences in the project setup
* removed 'has seen settings' flag from AppSettings
* fixed infinite loop that occurred when trying to find the source location of an unnamed template parameter.
* commented out the deploy settings define.
* implemented handling of template parameter packs.
* added tests for these cases.
* refactored some areas of the template code.
* fixed the names of template arguments that get parsed when they occur in a function's/declarator's body.
* fixed strings and number highlights within comments
* fixed quotations not considering escaped quotations within strings
* fixed quotations spanning till last quotation in line
* fixed tag quotations only used after blank space
* fixed multiline comments using correct start and end
* fixed single line comments interfering with multiline comments
* added color scheme template
* define fill, border, text, icon and hatching colors for each node with states normal and focus
* define colors for each edge with states normal and focus
* use default node and edge colors when no type specific ones are defined
* use normal colors for nodes and edges when no focused are defined
* allow nodes and edges to imitate look of others with "like" tag
* added style for bundle
* added style for count circle
* extended use of ASTBodyVisitor methods for visiting VarDecls to include FieldDecls as well (part of C++ 11).
* impemented handling of invalid source location in ASTVisitor to prevent crash.
* storing template argument relations for cases where at lease one of these (template class, template argument) is defined inside the parsed project files.
* prevented storage from saving the same source location multiple times.
* fixed Sublime Text plugin to correctly send messages
* activate and focus Coati window when receiving a message
* extended lookup range for activate token message from plugin
This change draws the annotations in the code view in the paintEvent handler instead of using the ExtraSelections API.
Annotations are now drawn with a slight corner radius. Fill and border colors are defined in the ColorScheme.
* CodeView displays comments as atomic regions. They are either displayed as a whole or not at all. Do nothing halfway!
* added CommentHandler that handles comments detected by clang.
* stored CommentLocations in database.
* saving errors in separate sqlite table
* use MessageShowErrors to show the errors in the UI
* show error count permanently in the right side of the status bar with click to show
* fixed clicking of error locations
* fixed expanding of files with errors
* the codeview now displays a hatched background for a filename when the file's content has changed or the file does not exist anymore.
* added TimePoint class to encapsulate boost.
The version string of the application is stored on every parse. The utility class Version is used to parse the version
string and compare application and stored string. The third number in the version string is now the storage refresh
number, the project will be refreshed when it changes. (0.2.1 -> 0.2.2)
* added status messages that are displayed when sending commands to the IDE.
* added status messages that are displayed when receiving commands from the IDE.
* handled communication from VS to Coati and vice versa.
* one bug still remains: Coati regards a tab as a single character while VS regards it as multiple characters. This causes offsets in communicated positions.
* fixed rpath in mac bundle
* added Qt5Network and Qt5DBus frameworks to bundle
* fixed project settings not saved
* fixed preferences not shown on first start
* added coati_manual.pdf
* When content that is shown in a snippet is located in the file scope, the snippet's title bar displays the file's name. Clicking this name has the same effect as maximizing the file (the file's entire content is shown but the file symbol is not activated).
* extracted code for translating input messages to token activations from the FeatureController to the helper class ActivationTranslator.
* used ActivationTranslator in UndoRedoController to determine if the symbols that have been selected before refresh are still available after parsing again.
* Added a new edge that connects a method of an implicitly specialized template class to its definition in the unspecialized template class.
* Added a test case for this.
* Made methods that have an invalid source location stored as undefined.
* expand toggle also for undefined classes
* changed direction of some template edges
* save same access component to specialized template functions and classes
* added new logos to setup ui
* changed wording in status messages and bundle nodes
* removed ununsed Vector.h
* save NameHierarchy to SearchMatch
* fixed NameHierarchyElement retrieval for name elements without parent
* fixed match weight to score last letters higher
This change passes all file node ids for clearing to the sqlite storage at once and makes use of ON DELETE CASCADE for
everything else, instead of manally deleting all source locations.
* fixed refreshing to send another ui refresh message after parsing
* keepContent field for MessageBase so that views won't update
* fixed searchmatching to only weigh uppercase letters next to lowercase ones
* fixed file not jumping back to snippets when activating edge
* clicking into empty space deselects active edge
* clear file manager files on every fetch
* added db transaction for file clearing
* use zooming instead of changing font size
This change makes MessageActivateTokens being used consistently throughout all Controllers. The FeatureController
accepts all incoming activation messages and turns them into MessageActivateTokens, which are then accepted by all
view controllers.
* showing project name in main window title
* keep reference count visible when maximizing code file
* show first node in db when no main function is available
* log Storage stats after parse
* fixed macro locations saved multiply
* using NameHierarchy when retrieving ids
* don't save macros from external files
* fixed macro and include saving duplicates
* added NODE_UNDEFINED_MACRO
TIL = You need to cut a 1kg cake about 85 times in half until you have a piece with only a single atom.
This change shows the files in the code view minimized, if more than 5. This greatly improves performance, because code
and annotations won't get loaded until needed. Files including declarations or definitions of the active symbol are
still expanded. The number of references in each file is now shown in it's title bar. Clicking the title bar allows for
expanding and collapsing as well now.
Namespace splitting is now handled in active token id retrieval from the Storage, so that namespace nodes are not added
to the Graph at all and complexity in the GraphController is reduced.
This change introduces the HierarchyCache that caches the member relationships of nodes in memory for faster graph
retrieval. Storing these relationships allows for retrieving nodes and edges as lists from the SqliteStorage at once
which results in a 10 fold speed improvement.
This change introduces bucket grid layouting, which sorts the nodes into buckets based on how they are connected. Each
bucket is then layouted individually before they are arranged next to each other. Edges go from left to right, except
for inheritance edges that go from bottom to top.
* readded Storage logs
* turned type name resolver error logs to info logs
* fixed inheritance not parsed in forward declarations
* check file node id before saving source location
* show errors in unparsed files again
* getting all incoming and outgogin edges to children at once in aggregation edge computation
* getting all edges connected to active node at once
* getting all access components for all member edges at once.
* removed header search in subdirectories of header search paths
* cache file node ids in Storage for faster lookup
* retrieve node names from SearchIndex
* fixed addNodeAndAllChildren also called for member edges
* added check if node already present in addEdgeAndAllChildren
* database stores modification time of files.
* FileManager updates internal state based on database info.
* reimplemented FileManager's check if a file is in project.
* implemented clearing data of updated or removed files before reparsing the updated and added files.
templateSpecializationArgsAsWritten returning null caused a crash
VisitMemberExprInDeclBody for vardecl was missing
subdirectories for headersearchpaths, that the user does not need to add a hugh amount of folders
* fixed first match in autocompletion not preselected
* fixed maximize file button extending snippets
* changed names of views and setting name of composite view
* fixed number of error locations
* opens on first start autmatically
* open from the menu under Preferences
* show version number on splash screen
* added recent projects markup to app settings template
* moved all qt window classes to qt/window
* put common form stuff from project setup and app settings into QtSettingsWindow
* realigned buttons and elements
* fixed retina styles for mac
* removed MessageLoadSource and subsequent functionality
* edit existing project through menu
* browsing paths from the line item in QtDirectoryListBox
* grow QtDirectoryListBox instead of scroll
* take any file or directory as valid path
* fixed new project setup screen background
* fixed screen handling on cancelation
This change removes the query syntax from the QtSmartSearchbox and all its classes. Now it only autocompletes to one
single Token, but the UI functionality for composing a query of multiple elements is still left for later use. The struct
SearchMatch is now used in the whole pipeline for passing search results back and forth.
* removed self assignment of id from Token
* removed FilterableGraph interface from Graph
* creating Nodes and Edges on Graph with addNode and addGraph methods
* removed obsolete Aggregation edge filtering
* fixed clang warnings
* fixed memory leak for Node creation
* replaced storage by a new version that utilizes sqlite for persistence.
* added SqliteStorage to manage direct access to the database.
* added testsuit for sqlite.
* slimmed down the protected interface of the storage.
* changed tests in StorageTestSuit to avoid using protected methods of the storage.
* added functions to begin and commit a transaction to the storage.
* removed GraphFilterTestSuite.
* removed GraphFilterConductorTestSuite.
* added Node and Edge constructor that takes id as parameter
* added constructor for TokenComponentNameCached that accepts NameHierarchy as parameter
* added TokenLocation constructor that takes locationId as parameter.
* created respective construction functions in TokenLocatonLine, -File and -Collection.
fortune cookie message = Recognition will come from unexpected sources.
added missing virtual destructor
fixed a warning in token.h: expression with side effects will be evaluated despite being used as an operand to 'typeid'
CMP00043 Cmake warning
added missing override keyword
* aggregation edges only connect toplevel nodes
* fixed aggregation click for undo and redo
* don't show edge name in search field, because they are not searchable
* clear search field when clicking aggregation
* leave active nodes active when clicking edges
This change checks all paths in the ProjectSettings file for relativity and makes them relative to the location of the
ProjectSettings file if necessary. The paths are also correctly saved relative to the file.
This change lets the user click the snippet title in the CodeView to insert the full scope. The existing snippets are
merged with the new lines accordingly.
Put all colors into single xml file. Accessing colors is handled via the singleton class ColorScheme. The default scheme
"bright.xml" holds the original colors. The scheme "dark.xml" is a start, but still a poor alternative. Color schemes
can be switched via the View menu.
This change adds font size and font family to the ApplicationSettings to have a single point for manipulating them. The
font size can also be changed via the menu or the zoomIn and zoomOut shortcuts on all platforms.
This change introdoces a classification of commands by order in the undo stack. Undoing the last action will resend the
message of the last active token change and all messages changing the ui after that.
* saving search query to undo stack with MessageSearch
* saving node and edge with name to undo stack with MessageActivateNode and MessageActivateEdge
* added FeatureController that handels distribution of MessageActivateTokens
* clearing views when refreshing or changing project
* clearing undo stack when changing project
* added StorageCache derived from StorageAccessProxy
This change bundles similar nodes in the graph view together. When the bundled node or it's aggregation edge are clicked,
then the bundle is split. This change also adds an arrow to the aggregation edge based on the direction of it's edges.
* fixed Storage saving specialized template functions as undefined function node
* fixed usages of same type in functions in return or parameter not clickable in graph, because the edges are on top
* moved graph postprocessing to GraphController to avoid reprocessing on edge activation
* animat sceneRect of the GraphView to avoid jump at end of animation
* enabled highDpi icons in QApplication for Searchbar Icons
* realigned StartScreen contents
* showing version number 0.1
* "Search" as placeholder text in SearchBar
* same content margins for each dockwidget view
* brighter variable color in Graph
* press ESC to close StartScreen
* renamed admin directory to php because adblocker blocked ajax
* don't refresh page when pressing enter
* improved english
* added db_config for live page
* save forward declarations of classes and structs as NODE_UNDEFINED_TYPE
* put whole files on top in snippet sorting
* uses aggregation count as weight in graph layouting instead of adding all edges to graph
* refreshing all views of components on MessageRefresh in ComponentManager
* reloading ApplikatinoSettings on MessageRefresh
* smoothing for edge lines
* fixed activation of token not working when multiple tokens active
* changed inheritance arrow
* thicker width for edges on focus
* common base class QtGraphNode
* derived class QtGraphNodeData for nodes representing the data model
* removed GraphNode and GraphEdge interface classes
* moved and renamed files for DummyNode and DummyEdge
* refactored includes throughout Graph UI related files
This change switches the code view UI to use minimize and maximize buttons within the QtCodeView instead of creating
separate windows for each maximized code file. Real icons for the buttons are still missing.
* use DEL key to delete next element
* cursor not jumping to end of word anymore when autocompletions are updated
* holding down arrows for moving to start or end of word won't turn word into element
fortune cookie message = You deserve to have a good time after a hard days work.
* added title for snippets
* title displays name of parent scope.
* when new TokenLocationFiles are created in the storage they are now returned as shared_ptr to ensure correct linking in the contained data.
* Storage::getTokenLocationsForLinesInFile() now always returns pairs of start and end locations.
* Adjusted code snippet view to regard the change described above.
This change ist just an interim solution and does not cover all cases.
The TokenLocation saved for the template argument is the location of the whole expression.
* fixed crash when hovering GraphNode while expanding/collapsing it
* fixed clang warnings
* fixed GraphNodeExpandToggle to show empty circle
* fixed Searchbar showing empty block when nothing was parsed
* made template related edges in GraphView red
* added SnippetMerger class that conducts the merging and snapping of TokenLocations to create snippets.
* added parameters for snippet snapping and merging to ApplicationSettings.
* added forEachStartTokenLocation() and forEachEndTokenLocation() to TokenLocationLine and TokenLocationFile.
* added < and > operators to TokenLocation that compare the location part (not the id).
* darkened red of error message in status bar
* added status error when not defined startupproject
* added tooltips for remaining search view buttons
* added filepath as tooptip for title in code view
* opening file when clicking title in code view
This change reduces the size of collapsed classes in the GraphView by removing the condensed view of the class access
nodes and using a single button next to the class name for collapsing and expanding instead.
* Created CxxNameResolver classes that take care of resolving the name hierarchies of clang components.
* NameResolvers store clang::Decls they ignore when traversing the hierarchy of DeclContext nodes. This approach is used to avoid infinite loops when parsing template parameters of a template class that depends on it's template parameters that depend on the template class....
<description>
This change makes the MessageQueue use Tasks for sending a Message to each MessageListener. Messages can define their
behavior by setting setSendAsTask(), the default is true. Only MessageStatus and MessageInterruptTasks are still sent on
the Messaging thread to allow for immediate effect.
This change also introduced the class SimpleTask which holds only a single perform() callback to override, for Tasks
that are finished in a single step. The class LambdaTask derives from SimpleTask and allows for passing a lambda as the
perform() callback.
This change introduces the TaskScheduler, which queues and processes Tasks on a separate thread. The Task class provides
a common interface for deriving all specific tasks. A task can split it's processing into multiple update calls. The
TaskScheduler will update a task until it is finished or interrupt it when necessary. TaskGroups can be used to bundle
multiple Tasks together. So far only TaskGroupSequential was implemented which runs the Tasks in the set order.
TaskParseCxx utilizes the CxxParser to parse each source file in a single update call. Parsing can be interrupted using
the ESC key. The Statusbar shows the parsing progress.
IMPORTANT: Windows users will have to execute clean, setup and cmake after this commit.
* added script to generate the program icon on windows.
* modified setup script to execute icon generator.
* modified CMakeLists to automatically generate the resource file required for windows builds and link it to the visual studio project.
* fixed test that was expecting a wrong result.
* refactored DataType class.
* added code to parse dependent type names.
* refactored utilityCxx a little.
This change adds the class GraphViewStyle that holds all values for defining the style of Nodes and Edges in the Graph.
The GraphViewStyleImpl interface and the QtGraphViewStyleImpl implementation are used to request Qt specific metrics,
like the charwidth of used fonts.
This change includes the following fixes:
* aggregation number always in the middle between nodes
* darker color for aggregation edge
* split off QGraphicsLineItem implementations from QtGraphEdge
* fixed some colors in color scheme
fortune cookie message = Sorge dich nicht! Du wirst bekommen was du brauchst.
Having only one access point to the Storage will simplify caching and parallelisation in the future. Also the two
accesses were never really independent of each other anyways, because in some cases they had to access both data sets.
This change facilitates loading Coati into Coati:
* removed error logs for TokenComponent setting
* fixed edge checks regarding template stuff
* separated CommonSettings to be inherited by Project- and ApplicationSettings for common settings
* pluralized SourcePaths setting in xml to allow for loading multiple directories and single files
* added CompilerFlags section to settings
* passing Compiler arguments to Parser via struct Parser::Arguments
* setting -isystem for all header search paths to avoid distinction between "" and <> headers
* parsing all headers from the SourcePaths, even the ones that are not included
* fixed parsing time measurement and display
* added utility.h file for general utility functionality
* Added tests for parameter parsing of template functions.
* Added missing tests for template parameters and arguments.
* Fixed warning when using the "typename" keyword in combination with template template arguments.
* Added code to handle template template default arguments and implemented test case.
* fixed search activating 2 nodes, because of NodeType in query
* fixed search results didn't contain results with same name
* added protected contents to sample and tictactoe code
* fixed CxxParserTests not logging errors, disabled logging for tests with errors
* fixed CxxParserTests not finding system headers, added TestSettings.xml and pass headers to Parser::parseFile()
* name of template class now also contains type information on the template parameters (e.g. typename, class, bool, const std::string&, etc.)
* implemented handling of non-type template parameters and template template parameters.
* implemented lots of tests for these features.
The utility class FilePath wraps an instance of boost::filesystem::path. Using FilePath allows for easy comparision of
file paths on different platforms using absolute or relative paths. Whereever file paths are compared, this wrapper
should be used.
This change adds the class FileRegister, that splits cpp and h files for the Parser and keeps track which headers have
been parsed yet. TranslationUnits get only created for cpp files now, and headers are parsed on the fly. This reduces
parse time by around half.
Fixed several issues with the overlaps resolving algorithm.
Introducing the cell padding in the last graph update caused some issues that are now resolved.
Coincidently the average number of algorithm iterations needed could be reduced, therefore the thing is now faster.
fortune cookie message = All the answers you need are right there in front of you!
Show the right colors in SearchView for the different NodeTypes or QueryNodeTyps
Note: add colors to your Applcationsettings like in the template
fortune cookie message = recognition will come from unexpected sources
This change adds the node NODE_FILE to the graph and the edge EDGE_INCLUDE, which determine the dependencies between
files by parsing the include preprocessor directive. File nodes can be searched and displayed in the GraphView as file
dependency graph. The filter "file" allows for selecting all files. The file depency information is used on project
refresh do determine which files need to get reparsed.
* Changed the TokenLocation of TemplateArguments to have at least a valid file name.
* Extended name of anonymous namespace by the containing file's name.
* Adjusted tests to reflect these changes.
* Fixed template parameters to be resolved to their correct names even if they are (re)definied outside of the class (e.g. for template method definitions).
* Added test code.
This change adds animated transitions to the QtGraphView using sequential and parallel animations. First vanishing nodes
and all edges get faded out, then the remaining nodes are moved and resized, lastly new nodes and all edges are faded in.
fortune cookie message = Sorge dich nicht! Du wirst bekommen, was du brauchst.
This change allows setting log levels on loggers. The apps ConsoleLogger was switched to only logging warnings and
errors the FileLogger still saves all types of logs.
Added CompositView, which implements both View and ViewLayout, for combining Views to one Widget. The layout can be set
to either horizontal or vertical. SearchView, RefreshView and UndoRedoView are combined to one DockWidget by the
ComponentManager now.
fortune cookie message = You'll get more secure and confident with your relationship with your co-workers.
* added FileManager that keeps track of the files analyzed by the project. It therefore checks if files get added, updated or deleted from the source- and include folders.
* refactored ASTVisitor::hasValidLocation() and implemented one version that search for the location in the currently parsed file and one that searches in all the project's source files.
* quickfix: switched order in FileManager so that header files are parsed first.
* created folder for helper classes used in tests.
* added test code for FileManager
* adjusted test code for Parser Tests.
* click in autocompletions list causes search
* right arrow for autocompletion
* changed query operator has from '>' to '.' and operator sub from '.' to '+'
* fixed autocompletions to fit to query
and
* fixed spectral layouting endless looping on unconnected node
* split active and visible setting for DummyNodes
* set and check visible on DummyEdges
* include fix for Mac in MatrixDynamicBase
* fix for disappearing style and crashes in GraphView
* cleaned up DummyNode
fortune cookie message = Du stehst kurz davor etwas Neues zu unternehmen.
* implemented parsing of template argument default parameters.
* added tests for default arguments of template parameters.
fortune cookie message = If you continually give, you will continually have.
This change adds the refresh component that allows for refreshing the source code via UI or shortcut. If automatic
refreshing is activated via the UI, the code is refreshed anytime the window gets focus. The contents of all the
updated source files get removed from Storage, before reparsing them. File dependencies are not respected yet.
* fixed: implicit template specializations will be found even if the original template definition is located in a different file (that gets included).
* implemented correct extraction of template parameters, template arguments and template specialization edges.
* added token locations for template parameters of partial template specializations.
* graph view displays full names of template parameters and template arguments.
* added test code for features
Implemented graph layouting, hybrid approach using spectral and force based layouting
fortune cookie message = Giving credit where it's due ensures loyalty to you.
* added sample code
* bigger and closed arrow for inheritance edge
* fixed code hover
* lightened scope colors
* fixed interrupted scope ranges to show all lines
* fixed edge creation to correctly show recursion
* prevent aggregation edge number from floating around
* scroll to top when changing codesnippets
This change saves the errors while parsing in the Storage and displays them in the CodeView. The error messages can be
read in the tooltip on hovering. The error count is visible in the status bar.
* HOT FIX: typename not always correctly split to name hierarchy
* show node main if available as first active token after parsing
* show all contents of namespaces if searched for
* added missing enum type and enum value usages
* added inheritance for structs
* removed MessageActivateToken and replaced it with MessageActivateTokens
* activating correct nodes for clicks in GraphView and CodeView
* no graph change when clicking an edge, but highlighting the edge instead
* only show active nodes without connections when multiple are activated
* fixed snippet sorting to put file that contains declarations on top
* set sizeHints on CodeView and SearchView to increase their initial size
fortune cookie message = Das Leben wird eine positive Wendung nehmen.
This change adds the creation of aggregation edges to the StorageGraph, which save the connection counts between
children in their parents. Aggregation edges are displayed using a straight line, that is thicker than more connections
it represents with the connection count in the middle.
This change fixes the clang cmake config to use release libs of clang, adds the TicTacToe source files to bin/app/src/
and adds time measuring to the parse call in Project.
This change puts the initial project loading into a MessageLoadProject so that the UI thread is still responding.
Also the StatusBar is now responding to more Messages and it's MessageListeners get added to the MessageQueue in
front of other listeners so that the StatusBar UI can announce actions.
* fixed clang warnings
* fixed cxxparser tests
* added missing checks for valid location in ASTVisitor callbacks for templates
* removed warning when statusbar view is removed
* made font of activated classes bold
* fixed search box not responding to autocompletion tab or enter press
* fixed search box not updated when active token changes
* Implemented basic parsing and storage of template parameter types, template classes and template functions
* Added template specialization edge.
* Implemented handling of partial specializations. Needs some more tweaking.
* Added a lot of test code for template stuff (still needs some cases to be tested)
* Removed the isTemplateParameterType from DataType, since it shouldn't be needed
* Function qualTypeToDataType uses clang PrintingPolicy to fetch the desired format.
* Merged a lot of code for getting the correct names and name hierarchies of definitions
* Removed TokenComponentDataType
* Merged both of the Storage::addTypeEdge(...) functions
* Added "-fno-delayed-template-parsing" flag to parser for parsing test code.
This change moves nested layouting of the Graph to GraphController. The DummyNodes get the correct size assigned, as
well as a visible flag. Mouse interaction with the Graph is now handled via the GraphController, which makes it
easier to undo them or reuse the changed state after graph updates.
This change styles the nodes in the QtGraphView. Since Stylesheets can't be applied to QGraphicsItems, the style
implementation was done in the source files. The containers for public/protected/private nodes are now subclassed from
QtGraphNode as QtGraphNodeAccess, including a helper class QtAccessArrow for indicating the opened/colapsed state.
* fitting boxes to name length
* highlighting active edges and nodes
* hover for edges and nodes
* single click selection for edges and nodes
* edges have transparent second line for easier clicking
* sub structure class members by public/protected/private
* hide completer when elements are updated
* show correct indices in sub query search
* move query elements forward when the cursor is at the end of the box
This change only shows matches in the autocompletion list that are prefiltered by the already entered query. The
autocompletion now also shows up after an operator of type . or > has been entered to show an alphabetical list of
possible tokens.
* replaced typenames (which have been stored as single sting where "::" indicated hierarchy levels) by a vector of strings where each element indicates a hierarchy level.
* introduced this change to the Storage method signatures, the ParseFunction and ParseVariable
* this way the SearchIndex creates a node for each level of the hierarchy.
This change switches the search box in the search view from QLineEdit to the derived QtSmartSearchBox implementation,
which is capeable of displaying tokens of the query as selectable button elements in different colors. It allows for all
the usual mouse and keyboard interactions that the QLineEdit offers.
fortune cookie message = Good news from someone dear is coming soon.
Graph view has now toggle-able subnodes. Subnodes connected to the active node are always visible.
fortune cookie message = You will enjoy true success in whatever you do.
This change allows for parsing of a real codebase by specifying the system header search paths in
ApplicationSettings.xml and the additional header search paths in ProjectSettings.xml.
Both settings files are now documented in ApplicationSettings_template.xml and ProjectSettings_template.xml, which show
all possible settings for each file.
This change also fixes some parsing edge cases that occured.
- QtSearchView was split into QtSearchView and QtSearchBox.
- QtSearchBox contains all Qt elements and can use them purely
- QtSearchView forwards calls from the SearchController to QtSearchBox
- Searching is initiated with MessageSearch to the SearchController
- Autocompletion is initiated with MessageSearchAutocomplete to the SearchController
- The search field is able to create filter queries by only giving autocompletions for the last token in the query
- For named tokens the search field adds their token ids to the query in the form of "A,25" for faster lookup
bug id = #21
This change refactors the GraphController to use the GraphAccess only with a single call that returns a Graph. The Graph
contains all information for visually representing the active Token with all parent and child nodes and edges. This
reduces coupling of the data and logic tiers.
Having the TestStorage as static field of the TestSuites caused problems in test startup, because the TestSuites are
instantiated globally and for some reason the programm has trouble allocating memory when initializing the SearchIndex.
This change stores each Token name in the separate singleton class Dictionary. The Dictionary gives each saved word an
Id and thereby avoids duplicated names. E.g if the constructor method "Graph::Graph" is stored then the word "Graph"
only appears once in memory.
The class SearchIndex is now responsible for the name hierarchy and is instantiated by the Storage. The SearchIndex
builds the name hierarchy using SearchNodes, each holding a Dictionary string reference of the name it holds. E.g if the
names "math::ceil" and "math::floor" are added to the SearchIndex then 3 nodes get created, the SearchNode "math" will
hold the two childs "ceil" and "floor".
The hierarchical graph creation functionality got split off from Graph into the new subclass StorageGraph. The
StorageGraph creates nodes with a passed SearchNode pointer of the name it represents in the SearchIndex. Thereby the
StorageGraph reuses the hierarchical information in the SearchIndex and can create nodes much quicker by avoiding node
searches and name comparisions.
The name information is now stored in the Nodes via the TokenComponentName class, which is subclassed into
TokenComponentNameReferenced and TokenComponentNameCached. The StorageClass creates nodes with the component
TokenComponentNameReferenced, which holds a pointer to the SearchNode instance holding the name. This allows for
retrieving the full name of the node, without using other Nodes int the Graph, which might not be present. If the Node
is copied then the component changes to a TokenComponentNameCached, which holds the full name as a string, so the
memory in the Storage doesn't have to be accessed anymore.
TokenComponentSignature is now only holding an Id of the signature string saved in the Dictionary, which speeds up the
signature comparison. A follow-up will change saving the whole signature as string to reusing the wordIds it is
consisting of.
Lastly the SearchIndex holds basic fuzzy search functionality. A passed query gets compared down the SearchNode
hierarchy as long as matches for each letter are found. Matches must contain all letters of the query. The search is
case-insensitive. If letters are found in front positions, next to each other or written in uppercase they are weighed
higher in the match ranking. The character ':' is also interpreted and found, although the '::' delimiter is not stored.
E.g. the query "m:l" used on the example above will return both "math::floor" and "math::ceil", but "floor" is ranked
higher because the 'l' appears closer to the start.
This change allows the user to use a simple query syntax in the search field to filter the results using names,
operators and predefined filters.
The class QueryTree is capable of parsing a simple query language consiting of QueryNodes, subclassed as
QueryOperators, QueryCommands and QueryTokens. QueryToken identifies a Token by name. QueryCommand represents predefined
filters. QueryOperator defines the syntactic relationship.
QueryNode examples:
"A" -> QueryToken that identifies the Token named A
class -> QueryCommand that filters all Nodes that are classes
. -> QueryOperator that concatenates filters
QueryExamples:
"A".class -> All Tokens named A that are classes
method.(private|protected) -> All methods that are private or protected
"A".member -> All members of A
"A":field.!const -> All fields of A that are not const (':' can be used instead of '.member')
QueryTree checks for correct operator precedence and validity of the query.
All QueryCommands can be found in data/query/QueryCommand.cpp
All QueryOperators can be found in data/query/QueryOperator.cpp
The parsed QueryTree is then passed to the class GraphFilterConductor, which is capable of applying the query on a
Graph. Each part of the query gets assigned a GraphFilter that filters the input Graph in order of node precedence. The
class SubGraph is used as intermediate container, only holding bare pointers to Nodes and Edges. The output Graph holds
all Nodes that match the query.
MessageActivateTokens is used to show all of the results in the CodeView. The GraphView currently only shows the first
Node of the results.
bug id = #6
This change adds the StorageTestSuite that checks whether the ParserClient callbacks cause the right things to be saved.
In order to allow for easier data retrieval the ParserClient callbacks now return the Id of the inserted Token, which
can then be used to retrieve the Token pointer.
This change parses type usages in function and method bodies and saves them with an edge of type EDGE_TYPE_USAGE. This
also includes base class types used in initialization lists of derived class constructors.
This change switches function and method parsing to use the structure ParseFunction, which holds all important values of
the function. This structure is then used also in call and usage parsing to allow distinction between signatures.
With this change typedefs have two TokenLocations, one for the TypeName and one for the UnderlyingType. When the
typedef is used with a variable the typedef is referenced now and not the underlying type.
This change parses the TokenLocations of scopes of classes, structs, functions, methods, namespaces and enums and
saves them in Storage with type LOCATION_SCOPE. The TokenLocations of these nodes are just their name declarations now.
Scope locations are displayed in blue color in the code view.
* Annotations updated when active token Id changes
* FileName in window title
* Maximize button not shown
* Scrolls roughly to the maximized location.
* Maximizing also on double click in code snippet
This change saves only the short names in the node, getName() no only gives the short version. The fullName is assembled
from the parent nodes on demand using the getFullName() method.
This change moves the EdgeComponent system to Token and redefines them as TokenComponents.
* Performance tests on the side showed that using typeid() in getComponent() is faster than dynamically casting every
pointer.
* The hasComponent() method was deliberately left out in the implementation, because it used to look up the right
component and discard it again. This check for presence can also be achieved by just using getComponent().
* The method addComponent() is protected in Token, so that Node and Edge can guard which Component is set on which type
by implementing specific setters for each Component.
* The GraphTestSuite was extended to include tests for the Component implementation (and missing tests for locationIds
in Token and copying of Node and Edge were added).
Changed gui wording in lib and app to view wording, since MVC views do not necessarily deal with GUIs. And moved files
so structure is similar in lib and app.
For easier use with int and other basic types, new logging macros where introduced that use stringstream internally, so
heterogeneous data can be logged using the following syntax:
LOG_INFO_STREAM(<< "hello " << 42 << '!');
* Implemented functions for parsing usages of fields and global variables in ASTBodyVisitor and ASTVisitor.
* Storage adds TokenLocatons and Edges for usages.
* Added tests for parsing usage of fields and global variables.
fortune cookie message = Fame, riches and love are yours for the taking.
The shortcut is added to the new Find menubar item and dispatches a MessageFind, which is handled by the
SearchController. QtSearchView assures via the ViewLayout that the view is visible when setting focus on the search box.
FontMetric specific settings are now applied in the showEvent method, which is executed right before showing the Widget
where the font setting from the stylesheet is already present.
* updated spacings and colors in QtCodeView and QtCodeFile
* using Source Code Pro Regular (had to remove light cut from the Fonts folder because it got always used)
* updated syntax highlighted colors to fit design
* changed colors of highlights
* indent all QtCodeSnippets by maximum line number in QtCodeFile
* fixed syntax highlighting to work with sole multiline comment end
fortune cookie message = Your present plans are going to succeed.
The graph views edges are now clickable. On click the edge and its connected nodes will be displayed.
fortune cookie message = Be prepared to accept an exciting opportunity in the future.
This change makes it possible to create a MacOSX app bundle of either Debug or Release builds:
* The script setup/MacOSX/bundle_install.sh is configured by cmake to be placed in the apps Debug and Release folders.
* Execution of bundle_install.sh creates the bundle file structure and copies binaries, libs, frameworks and resources
into it.
* The script uses install_name_tool to reconfigure the dynamic library paths and framework paths of the binary, so they
won't point to the system libraries, but to the locations in the bundle instead.
* An Info.plist file is also configured by cmake and placed in the bundle by the script. Note: It is named
bundle_info.plist in the Debug and Release folders after configuration so the start of the binary during developement
does not use it.
* When opening the bundle it is assured via setup() in src/app/platform_includes/includesMac.h that the working
directory of the binary is set to .app/Contents/Resources so the paths to the data files are evaluated correctly.
fortune cookie message = Dein Einsatz wird in Kürze belohnt werden.
* removed const m_dimensions in VectorBase and replaced it with N
* changed signature of DummyNode::operator=
* fixed warning for DummyNode wrongly declared as class
Added simple layouting functions (implementations for simple grid and circle layout).
Also the graph displays class members and connections (edges) to or from them "correctly" now.
fortune cookie message = Your exotic ideas will lead you to many exciting new adventures.
This change save typedef expressions to the Storage using a node of type Node::NODE_TYPEDEF and an edge of type
Edge::EDGE_TYPEDEF_OF that leads to the original type, with the qualifiers saved as DataType on the edge.
This change introduces the structure ParseTypeUsage for passing information about type usage from the parser to it's
client. It is used for passing data type and location information about return types and parameter types, which now
get saved to the corresponding edges in the Storage.
* Added Array and Reference Modifier for DataType.
* Created basic tests for DataType.
* Fixed bug where qualifiers of modifiers were not copied correctly.
* Fixed bug where DataType modifiers were applied in the wrong (reverse) order.
Function and method nodes are now distincted by their signature when added to the graph. A different node for each
overloaded declaration is created with the signature as member field.
fortune cookie message = Deine harte Arbeit wird schnell belohnt werden.
- ASTVisitor uses DataType instead of string to pass on type information.
- Edges can have EdgeComponents.
- EdgeComponentDataType stores information that modifies the type a ...TYPE_OF edge points to.
- EdgeComponentDataType can create a complete DataType using it's internal information.
- Fixed a bug where DataTypeModifiers did not apply their qualifiers.
Moved Storage instantiation into the Project. Storage access is still handled via the GraphAccess and LocationAccess
interfaces, but the ComponentFactory now only serves proxy implementations of these access classes. Project is
responsible for setting the subject of the proxies to the current Storage instance.
Added MenuBar action Project->New, which opens a directory dialog for choosing the new source directory to parse the
files from. The ConfigManager can be created empty now and setValue calls can be used to set values.
fortune cookie message = Your troubles will be faded by the luck you will soon have.
This change adds a MenuBar to QtMainWindow and adds an action for opening a different project settings XML file. The
message MessageLoadProject is thereon used to load a new project in the Application and clearing the Storage.
* activate token of most nested location
* show parts of locations with start or end outside of snippet
* (fix for multiple parsing of function and method bodies)
This change parses calls in CxxParser by using the class ASTBodyVisitor which traverses the Stmts and Exprs in the body
of the function and method declarations.
The calls include:
* calls in functions
* calls in methods
* constructor calls
* constructor calls in initialization lists
* implicit constructor calls of fields
* calls to operators
* global constructor calls of global variables
* global function calls for global variables
The calls don't include:
* destructor calls
* some calls to implicit constructors and copy constructors
fortune cookie message = Don't be afraid to take that big step.
By now the graph displays the active node, without neighbours or anything, and clicking a node sets the active token id to the clicked nodes id.
fortune cookie message = Be prepared to accept an exciting opportunity in the future.
This change removes the local std::string variable in the log macros due to possible name collisions with macro callers
in clang. Responsibility of this change is held by Malte.
This change parses inheritance in CxxParser and saves them as EDGE_INHERITANCE in the Storage's graph. Tests for correct
inheritance recognition were added to CxxParserTestSuite.
fortune cookie message = If you continually give, you will continually have.
- Implemented autocompletion for the QtSearchView.
- Added: MessageFinishedParsing that will be dispatched by the Project after the parsing step is done.
- Moved the initial MessageActivateToken from the Project to the Application.
- Added getNamesForNodesWithNamePrefix() to GraphAccess.
- Added a basic SearchView (+ controller and qt implementation)
- SearchView can set the active element of other views by dispatching a message.
- SearchView adjusts its text when the active element is changed by other views.
- Added wrappers for Button and EditBox that allow the usage of simple callback functions.
This change refactors parts of the QtCodeSnippet and places some settings into ApplicationSettings.
Additionally Application- and ProjectSettings were abstracted to the common base class Settings, which takes care of the
getting and setting values of the Configmanager member.
- Renamed MessageActivateTokenLocation to MessageActivateToken, since it uses the Token id (not the TokenLocation id).
- Implemented CodeController to add one snippet for each location where the activated token occurred.
- Added Semaphore to QtThreadedFunctor to prevent an evil race-condition.
- CodeView dispatches message when a token is clicked.
Added some features to QTCodeSnippet:
* Code is now annotated using information from TokenLocationFile
* Start of line numbering can be set
* Clicking on an annotation in the code gives the corresponding Token Id
fortune cookie message = Your kindness will be repaid.
- Replaced CodeAccess with LocationAccess.
- Implemented basic functionality for CodeController.
- Added messaging to the project.
- Added QtThreadedFunctor to enable our Messaging thread to invoke calls on the QtThread.
- Added GraphController.
fortune cookie message = Good news from someone dear is coming soon.
This change switches the view creation architecture from element based creation in the lib to view based creation in the
app. This avoids wrapping of the Qt elements and instead defines interfaces for the different View implementations.
* GuiElementFactory was renamed to GuiFactory and is now responsible for View creation instead of Element creation.
* WidgetWrappers are now used on Views to access their root widget.
* Removed DummyView and DummyController.
* Removed GuiElement and corresponding QtElement files.
* Removed ViewManager, functionality is now handled via MainView.
* Added MainView, where Views are registered via the ViewLayout interface.
* Added QtMainWindow, derived from QMainWindow and instantiated by QtMainView, which displays the Views as QDockWidgets.
fortune cookie message = All your hard work will soon pay off.
This change adds structures for saving TokenLocations in the Storage and improves the location derival in the
ASTVisitor:
* TokenLocation saves an Id of a Token. For each Token two TokenLocations are created for both start- and endpoint. They
keep a reference to each other and know whether they are start or end.
* TokenLocationLine saves all TokenLocations in a line and the lineNumber.
* TokenLocationFile saves all TokenLocationLines of a specific file and the filePath.
* TokenLocationCollection saves multiple TokenLocationFiles.
* TokenLocation can derive it's lineNumber and filePath through references to first TokenLocationLine and from there to
TokenLocationFile.
We decided to stop code reviews for now, because they are too time consuming. We will consider reintroducing them when
the project is at a more mature stage.
Changed old 2d vector template to a generic vector class that can have any amount of dimensions. Added implementations for 2d and 4d and typedefs for int and float.
Updated the unit tests accordingly
fortune cookie message = pray for what you want but work for the things you need
This change removes the ConsoleLogger from the TestSuiteFixture and registers a PlainFileLogger instead, which saves
logs during testing into the file bin/test/data/log/test_log.txt.
This change adds graph data structures Token, Node, Edge and Graph for holding code semantics in the Storage and fills
them with the parsed data. Things to note:
* Token is the base for the classes Edge and Node and holds a unique id.
* Graph is the owner of all Nodes and Edges.
* A Node saves the Edges it is endpoint of.
* An Edge saves the Nodes that are endpoints.
* Nodes and Edges are not subclassed. The different Node and Edge types are distinguished by the enums NodeType and
EdgeType. Type specific fields are therefore available for all types, a check when assigning them prohibits faulty
usage.
* Storage uses the Graph::getNodeHierarchy method, which is not strict about knowing type names beforehand. E.g. if A::B
is passed in and A doesn't exist so far, then node A gets created as NODE_UNDEFINED with B as it's child.
* The Graph methods addNodeAsPlainCopy and addEdgeAsPlainCopy can be used to create a sub-graph without reference to the
original, but with the same ids.
review id = 19
fortune cookie message = Your cheerful outlook is one of your best assets.
Added CodeView interface and QtCodeView implementation for showing syntax highlighted code snippets. This change avoids
using the GuiElement hierarchy by using directly using QtClasses and creating QtCodeView in the QtElementFactory.
modified tests to check different cases more independently.
review id = 23
fortune cookie message = You will have a peace of mind when you talk to an old friend. (Du wirst einem alten Freund begegnen und deine Ruhe finden.)
- added callbacks that will be called when clang encounters typedefs.
- added tests for this feature.
review id = 20
fortune cookie message = New ideas could be profitable.
Detects most elements in the code, currently classes, structs, global variables, fields, functions, methods, namespaces
and enums. The structs ParseLocation and ParseVariable are helper objects to transmit information to the ParserClient.
Currently the parsed information only gets logged in the Storage.
review id = 15
fortune cookie message = In dreams and in life, nothing is impossible.
Added boost components: filesystem and system to the project
environment varibable BOOST_155_DIR targeting the boost_1_55_0 folder is needed
review id = 14
fortune cookie message = when you speak honestly and openly, others truly listen to you
To use the messaging system the classes Message and MessageListener need to get derived. The Singelton MessageQueue is
responsible for managing listeners and sending messages in a threadsafe way.
review id = 9
fortune cookie message = You are on your track to starting something new.
- added abstract class tree for gui elements.
- implemented concrete gui classes that wrap the qt specific content.
- implemented first DummyView which plays nice with the ViewManager.
review id = 12
Enabled logging in unit tests.
Seperated LogManager into LogManager (singleton stuff) and LogManagerImplementation (actual logging stuff)
Implemented simple FileLogger
review id = 13
This change adds CxxParser a class for parsing cxx files. It holds basic functionality to detect classes using the clang
libTooling classes. CxxParser is derived from a common Parser interface, which can later be used for other language
parsers. The Parser forwards detected elements to a ParserClient interface, which is implemented by the Storage class.
The detected classes only get logged so far.
review id = 6
* bd3c63a - (HEAD, origin/class, class) applied second review <Eberhard Graether> (4 minutes ago)
* 3db7d93 - added missing files <Eberhard Graether> (4 days ago)
* 6d09f4e - applied review <Eberhard Graether> (4 days ago)
* d9d3e64 - fixed CMake files <Eberhard Graether> (4 days ago)
* f22a771 - only one Storage class <Eberhard Graether> (4 days ago)
* 6ee9553 - added tests <Eberhard Graether> (4 days ago)
* 0a525e8 - fixed includes <Eberhard Graether> (4 days ago)
* ca3fbb8 - added StorageManager as ParserClient <Eberhard Graether> (4 days ago)
* fa185a5 - renamed ParseLocation to ParseObject <Eberhard Graether> (4 days ago)
* 8b89808 - pass location with ParseLocation object <Eberhard Graether> (4 days ago)
* 548ae3c - renamed clang AST classes <Eberhard Graether> (4 days ago)
* d3b2caf - cleaned includes <Eberhard Graether> (4 days ago)
* f7fdf33 - removed using namespace stmts <Eberhard Graether> (4 days ago)
* 5378ef6 - using ParserClient <Eberhard Graether> (4 days ago)
* b9ce2f6 - working with test file <Eberhard Graether> (4 days ago)
* 5585abc - added CxxParser and ParserClient <Eberhard Graether> (4 days ago)
Clang is usually compiled without runtime type information, so all files that use clang classes can't have rtti. This
change creates a separate CLANG_FILES variable which holds all clang files, so they can be compiled without rtti.
review id = 11
Adds clang and llvm include directories and libraries to the build. The
environment variable CLANG_DIR is used to define the location of llvm
and clang. A simple clang tool implementation was added to assure proper
operation of the libraries.
- switched to !/bin/bash because of issues with echo -e on Mac OS
- improved git-sync-master.sh to also rebase on current feature branch
- improved logs in git-publish.sh
- changed build scripts to execute from /bin
Added cmake build instructions for app, lib and test.
Included Qt via environment variable QT_DIR.
Included CxxTest via environment variable CXX_TEST_DIR.
Added scripts for setup, syncing master and publishing features.
Added dlls for QT on Windows.
This change adds the commit message template in file
.git_commit_message.txt. It will be used after once running:
$ git config commit.template .git_commit_message.txt
reviewer=
review url=
2014-02-04 00:12:58 +01:00
2401 changed files with 635174 additions and 1 deletions
If you like this project and want to get involved, there are lots of ways you can help:
* __Spread the word.__ The more people want this project to grow, the greater the motivation for the developers to get things done.
* __Fund the development.__ Further development and maintainance of this project is crowd funded via [Patreon](https://www.patreon.com/sourcetrail). If you would like Sourcetrail to grow and improve but cannot spare the time to contribute your self, please consider making a pledge.
* __Test Sourcetrail.__ Run it on your own source code. If you find any issues, just report it here. Best, include some detailed step-by-step instructions that illustrate how to reproduce the issue, so that we can use it as a basis to craft a test case for our continuous integration and no one will ever break that case again.
* __Write some code.__ Don't be shy here. You can implement whole new features or fix some bugs, but you can also do some refactoring if you think that it benefits the readability or the maintainability of the code. Still, no matter if you just want to work on cosmetics or implement new features, it would be best if you create an issue here on the issue tracker before you actually start handing in pull requests, so that we can discuss those changes first and thus raise the probability that those changes will get pulled quickly.
To create a pull request, follow these steps:
* Fork the Repo on GitHub.
* Make your commits.
* If you added functionality or fixed a bug, please add a test.
[Sourcetrail](https://www.sourcetrail.com/) is a free and open-source cross-platform source explorer that helps you get productive on unfamiliar source code.

Sourcetrail is:
* free
* working offline
* operating on Windows, macOS and Linux
* supporting C, C++, Java and Python
* offering an SDK ([SourcetrailDB](https://github.com/CoatiSoftware/SourcetrailDB)) to write custom language extensions
## Support Sourcetrail via Patreon
The ongoing development and regular software releases are made possible entirely by the support of [these awesome patrons](SPONSORS.md)! If you'd like to join them, please consider [becoming a patron](https://www.patreon.com/sourcetrail) of Souretrail.
## Using Sourcetrail
Download the respective build for your operating system from our list of [Releases](https://www.sourcetrail.com/downloads) and install it on your machine. After that follow our [Quick Start Guide](https://www.sourcetrail.com/documentation/#QUICKSTARTGUIDE) to get to know Sourcetrail.
## How to Report Issues
You can post all your feature requests and bug reports on our [issue tracker](https://github.com/CoatiSoftware/Sourcetrail/issues).
### Reporting
Use the following template:
* platform version:
* Sourcetrail version:
* description of the problem:
* steps to reproduce the problem:
### Supporting
If you want to support a certain feature request or you have the same bug that another user already reported, please let us know:
* post a comment with "+1" to the issue
* or send an email to support@sourcetrail.com with the issue ID
## How to Contribute
Please read and follow the steps in [CONTRIBUTING.md](CONTRIBUTING.md) file.
# How to Build
Building Sourcetrail requires several dependencies to be in place on your machine. However, our CMake based setup allows to disable indexing support for specific languages which reduces the number of dependencies to a minimum.
## Building the bare minimum
### Required Tools
#### Git
This is required for generating the Sourcetrail version number. Get it from: https://git-scm.com/download.
Make sure `git` is available in added to your `PATH` environment variable.
#### CMake v3.12
This is used for generating a build configuration. Get it from: https://cmake.org/download/
### Additional tools for Windows
#### Visual Studio
### Additional tools for Unix
#### ccache
This is optionally used to speed up rebuilds if found in `PATH`.
### Required dependencies
#### Boost 1.68
For the __msvc__ compiler pre-built binaries can be downloaded from [sourceforge.net/projects/boost/files/boost-binaries](https://sourceforge.net/projects/boost/files/boost-binaries/)
If you are using the gui, we recommend that you activate advanced mode. Also you may be required to add some of the defines via the "Add Entry" button.
After generating the build configuration, just open the Sourcetrail.sln file that was generated by CMake and build the Sourcetrail project.
Run Sourcetrail from within the build directory. During execution Sourcetrail needs resources from `bin/app/data` and `bin/app/user`. Cmake creates symlinks to these directories within the build directory.
## Enable C/C++ Language Support
### Required dependencies
#### LLVM/Clang 8.0.1
##### Windows
For the __msvc__ compiler, follow [these steps](https://clang.llvm.org/get_started.html) to build the project and make sure that you run the cmake command exactly as described.
##### Unix
For Unix, follow this [installation guide](http://clang.llvm.org/docs/LibASTMatchersTutorial.html)
Build with `-DLLVM_ENABLE_RTTI=ON`.
### Building
Run CMake with these additional options:
```
-DClang_DIR=<path/to/llvm_build/lib/cmake/clang>
-DBUILD_CXX_LANGUAGE_PACKAGE=ON
```
## Enable Java Language Support
### Required dependencies
#### JDK 1.8
Install JDK and make sure the `JAVA_HOME` environment variable is set:
```
JAVA_HOME=.../Java/jdk1.x.x_xxx
```
Also make sure `<jdk_root>/bin` is available in your `PATH` environmen variable.
### Building
Run CMake with these additional options:
```
-DBUILD_JAVA_LANGUAGE_PACKAGE=ON
```
## Enable Python Language Support
### Required dependencies
#### WinRAR (for Windows only)
### Building
Run CMake with these additional options:
```
-DBUILD_PYTHON_LANGUAGE_PACKAGE=ON
```
## Packaging
### Windows
#### Required Tools
##### Visual Studio
##### Wix 3.11
##### Wix extension for Visual Studio
##### WinRAR
Make sure to append these directories to your `PATH` environment variable:
* VisualStudio/Common7/Tools
* VisualStudio/Common7/IDE
* .../Microsoft SDKs/Windows/v7.1A/Bin (for uuidgen in deploy script)
* .../WiX Toolset v3.11/bin
* .../WinRAR
Run `./script/deploy_windows.sh` script which will generate 32bit/64bit builds and packages these into a portable `.zip` file and a Wix-based Windows installer, each.
### macOS
After building, run the `bundle_install.sh` script within the build directory which will create a `Sourcetrail.app` bundle and generate a `Sourcetrail_<version>.dmg` container.
### Linux
Run `./script/buildonly.sh package`
# How to Run the Tests
The automated test suite of Sourcetrail is powered by [Catch2](https://github.com/catchorg/Catch2). To run the tests, simply execute the `Sourcetrail_test` binary. Before executing, please make sure to set the working directory to `./bin/test`.
# License
Sourcetrail is licensed under the [GNU General Public License Version 3](LICENSE.txt).
# Trademark
The "Sourcetrail" name is a trademark owned by Coati Software and is not included within the assets licensed under the GNU GPLv3.
<!-- COLOR: int int int int - rgba e.g. 125 125 125 255 -->
<config>
<version><!-- INTEGER: Version number --></version>
<description><!-- STRING: optional description shown in overview. Symbols can be linked with syntax [main] --></description>
<source_groups>
<source_group_xyz>
<type><!-- STRING: describes what kind of project this is, e.g. "C Source Group", "Java Source Group from Maven" --></type>
<standard><!-- STRING: language version, e.g. c++ '11' --></standard>
<source_paths>
<source_path><!-- STRING: path to source file or directory, also used as header search path --></source_path>
</source_paths>
<exclude_paths>
<exclude_path><!-- STRING: path to file or directory to exclude from analysis --></source_path>
</exclude_paths>
<source_extensions>
<source_extension><!-- STRING: extension for source e.g. .cpp --></source_extension>
</source_extensions>
<header_search_paths>
<header_search_path><!-- STRING: header search path for each path a header_search_path element --></header_search_path>
</header_search_paths>
<use_source_paths_for_header_search><!-- BOOL: If enabled all subfolder of the source paths will be used for header search --></use_source_paths_for_header_search>
/// Counts the number of bits in the source operand having a value of 1.
///
/// \headerfile <x86intrin.h>
///
/// This intrinsic corresponds to the <c> POPCNT </c> instruction.
///
/// \param __A
/// An unsigned 32-bit integer operand.
/// \returns A 32-bit integer containing the number of bits with value 1 in the
/// source operand.
static__inline__int__DEFAULT_FN_ATTRS
_mm_popcnt_u32(unsignedint__A)
{
return__builtin_popcount(__A);
}
/// Counts the number of bits in the source operand having a value of 1.
///
/// \headerfile <x86intrin.h>
///
/// This intrinsic corresponds to the <c> POPCNT </c> instruction.
///
/// \param __A
/// A signed 32-bit integer operand.
/// \returns A 32-bit integer containing the number of bits with value 1 in the
/// source operand.
static__inline__int__DEFAULT_FN_ATTRS
_popcnt32(int__A)
{
return__builtin_popcount(__A);
}
#ifdef __x86_64__
/// Counts the number of bits in the source operand having a value of 1.
///
/// \headerfile <x86intrin.h>
///
/// This intrinsic corresponds to the <c> POPCNT </c> instruction.
///
/// \param __A
/// An unsigned 64-bit integer operand.
/// \returns A 64-bit integer containing the number of bits with value 1 in the
/// source operand.
static__inline__longlong__DEFAULT_FN_ATTRS
_mm_popcnt_u64(unsignedlonglong__A)
{
return__builtin_popcountll(__A);
}
/// Counts the number of bits in the source operand having a value of 1.
///
/// \headerfile <x86intrin.h>
///
/// This intrinsic corresponds to the <c> POPCNT </c> instruction.
///
/// \param __A
/// A signed 64-bit integer operand.
/// \returns A 64-bit integer containing the number of bits with value 1 in the
/// source operand.
static__inline__longlong__DEFAULT_FN_ATTRS
_popcnt64(longlong__A)
{
return__builtin_popcountll(__A);
}
#endif /* __x86_64__ */
#undef __DEFAULT_FN_ATTRS
#endif /* __POPCNTINTRIN_H */
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.