CINXE.COM
Debug Adapter installation · mfussenegger/nvim-dap Wiki · GitHub
<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-3e154969b9f9.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-9c5b7a476542.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-afda8eb0fb33.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-2494e44ccdc5.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-56fff47acadc.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-71cd4cc132ec.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fd5499848985.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-31d17ba3e139.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-68d6b2c79663.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-4cf0d59ab51a.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-af846850481e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-8b10f05a77e6.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-2f6e722088eb.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-9c77ed90200e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/wiki-0f9a446f06a3.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["copilot_new_references_ui","copilot_beta_features_opt_in","copilot_chat_static_thread_suggestions","copilot_conversational_ux_history_refs","copilot_implicit_context","copilot_smell_icebreaker_ux","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","hovercard_accessibility","issues_react_new_timeline","issues_react_avatar_refactor","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","marketing_pages_search_explore_provider","react_keyboard_shortcuts_dialog","remove_child_patch","sample_network_conn_type","site_metered_billing_update","issues_react_first_time_contribution_banner","lifecycle_label_name_updates"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-6657579a8825.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_js-b73fdff77a4e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-aff936e590ed.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-247092-740e4ddd559d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-93b6a0551aa9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-cd35650c2e9c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-4aa4b0e95669.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-6d3967acd51c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_combobox-nav_dist_index_js-node_modules_github_g-emoji-element_di-6ce195-53781cbc550f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-3cdfa69a0406.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-f5498b8d4e5d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-492b5042c841.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-1f651a-1e3d784c897c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-7671f1-dc6cac136d88.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-71486356f507.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-e3ab8405ef80.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-634de60bacfa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-ce7225a304c5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_hydro-analytics-client_dist_analytics-client_js-node_modules_gith-f3aee1-e6893db9c19e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-f8a5485c982a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-858e043fcf76.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-6cf3320416b8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_scroll-anchoring_dist_scroll-anchoring_esm_js-node_modules_stacktrace-pa-a71630-6f3c4f0189d8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-0e07cc183eed.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-0b5e12-889cec8cf448.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-eae9df0dd562.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-18d1c91a7872.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-7cbef09a422c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-d0d0a6-0e9fa537dc4f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-c89801ebbe15.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-a6e4c4c86bfa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-3366f6b6298e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-cd0a67881543.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryClient_js-e40bb86d3e93.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-585c05e837f3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-96453a51f920.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_primer_live-region-element-32d343-56ceead9587a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_delegated-events_di-cc9bcb-ea42a360c5ae.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-043af64042a1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_diffs_blob-lines_ts-app_assets_modules_github_diffs_linkable-line-n-b8c0ea-77a5219efe36.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/diffs-26b30052e1d0.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-765944243383.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-cd0a67881543.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-7b7b5264f6c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-45c3a19dd792.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryClient_js-e40bb86d3e93.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-37e3d5-31653d7f2342.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-285fc29e9fa5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-4896ddd4b7bb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-3eda30673b32.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_delegated-events_dist_in-31d801-f60a3d7353df.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wiki-3855f01834d5.js"></script> <title>Debug Adapter installation · mfussenegger/nvim-dap Wiki · GitHub</title> <meta name="route-pattern" content="/:user_id/:repository/wiki/:id(.:format)" data-turbo-transient> <meta name="route-controller" content="wiki" data-turbo-transient> <meta name="route-action" content="show" data-turbo-transient> <meta name="current-catalog-service-hash" content="27690012a2eb28b75d0bacab0f2c11870266e8db9e019fa71fea812b82397bd6"> <meta name="request-id" content="E9FA:4CFEB:23339F:281843:674B2F7A" data-pjax-transient="true"/><meta name="html-safe-nonce" content="d00199b4465613a9eb92b8776a1b446a3fd6fe26730d5557730f96d0efab3eb7" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFOUZBOjRDRkVCOjIzMzM5RjoyODE4NDM6Njc0QjJGN0EiLCJ2aXNpdG9yX2lkIjoiODMxNzk3NTAyMjU3NzMzMjA5MCIsInJlZ2lvbl9lZGdlIjoic291dGhlYXN0YXNpYSIsInJlZ2lvbl9yZW5kZXIiOiJzb3V0aGVhc3Rhc2lhIn0=" data-pjax-transient="true"/><meta name="visitor-hmac" content="3bd4a5ce5c8d684e7a3fb5962f6e22386597f03bea4c6517687728e470369b5a" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:255639672" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="repo_wiki" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/<user-name>/<repo-name>/wiki/show" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content="Debug Adapter Protocol client implementation for Neovim - Debug Adapter installation · mfussenegger/nvim-dap Wiki"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation" /> <meta name="twitter:image" content="https://opengraph.githubassets.com/104a2be47a28ab16a149b9198ba3b430e49fd223753c891a6bc082791d61f28d/mfussenegger/nvim-dap" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="Debug Adapter installation" /><meta name="twitter:description" content="Debug Adapter Protocol client implementation for Neovim - mfussenegger/nvim-dap" /> <meta property="og:image" content="https://opengraph.githubassets.com/104a2be47a28ab16a149b9198ba3b430e49fd223753c891a6bc082791d61f28d/mfussenegger/nvim-dap" /><meta property="og:image:alt" content="Debug Adapter Protocol client implementation for Neovim - mfussenegger/nvim-dap" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="Debug Adapter installation" /><meta property="og:url" content="https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation" /><meta property="og:description" content="Debug Adapter Protocol client implementation for Neovim - mfussenegger/nvim-dap" /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="0361a11d6ba7285e98ad3340b1de5998c1adf9be672ff350e645684a12c5ff34" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="ace39c3b6632770952207593607e6e0be0db363435a8b877b1f96abe6430f345" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="3adbaefc258174e49a9472f62ba4ed262e7c0112f9e7266a3e927bd7b898716f" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="58069173ba3ee40a605f317588f70346d3cda2c3c32d767dd6d2909bbe343612" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta name="go-import" content="github.com/mfussenegger/nvim-dap git https://github.com/mfussenegger/nvim-dap.git"> <meta name="octolytics-dimension-user_id" content="38700" /><meta name="octolytics-dimension-user_login" content="mfussenegger" /><meta name="octolytics-dimension-repository_id" content="255639672" /><meta name="octolytics-dimension-repository_nwo" content="mfussenegger/nvim-dap" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="255639672" /><meta name="octolytics-dimension-repository_network_root_nwo" content="mfussenegger/nvim-dap" /> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-765944243383.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-45c3a19dd792.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-37e3d5-31653d7f2342.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-285fc29e9fa5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-4896ddd4b7bb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-f3cc184507a7.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.9fa170e9435ed4b922b9.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-cf3dd69d89eb.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-8fa3b694f335.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Logomark;ref_loc:Header"}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fmfussenegger%2Fnvim-dap%2Fwiki%2FDebug-Adapter-installation" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation","user_id":null}}" data-hydro-click-hmac="74bfef0b3a17123a92e9e07d6748950ea0044b1089014449f1581d9a85adcbd2" data-analytics-event="{"category":"Marketing nav","action":"click to Sign in","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"product","tag":"link","label":"github_copilot_link_product_navbar"}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"security","context":"product","tag":"link","label":"security_link_product_navbar"}" href="https://github.com/features/security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"actions","context":"product","tag":"link","label":"actions_link_product_navbar"}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"codespaces","context":"product","tag":"link","label":"codespaces_link_product_navbar"}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"issues","context":"product","tag":"link","label":"issues_link_product_navbar"}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"code_review","context":"product","tag":"link","label":"code_review_link_product_navbar"}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"discussions","context":"product","tag":"link","label":"discussions_link_product_navbar"}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"code_search","context":"product","tag":"link","label":"code_search_link_product_navbar"}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"all_features","context":"product","tag":"link","label":"all_features_link_product_navbar"}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"documentation","context":"product","tag":"link","label":"documentation_link_product_navbar"}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"github_skills","context":"product","tag":"link","label":"github_skills_link_product_navbar"}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"blog","context":"product","tag":"link","label":"blog_link_product_navbar"}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"enterprises","context":"solutions","tag":"link","label":"enterprises_link_solutions_navbar"}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"small_and_medium_teams","context":"solutions","tag":"link","label":"small_and_medium_teams_link_solutions_navbar"}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"startups","context":"solutions","tag":"link","label":"startups_link_solutions_navbar"}" href="https://github.com/enterprise/startups"> Startups </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devsecops","context":"solutions","tag":"link","label":"devsecops_link_solutions_navbar"}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"solutions","tag":"link","label":"devops_link_solutions_navbar"}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ci_cd","context":"solutions","tag":"link","label":"ci_cd_link_solutions_navbar"}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_use_cases","context":"solutions","tag":"link","label":"view_all_use_cases_link_solutions_navbar"}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"healthcare","context":"solutions","tag":"link","label":"healthcare_link_solutions_navbar"}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"financial_services","context":"solutions","tag":"link","label":"financial_services_link_solutions_navbar"}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"manufacturing","context":"solutions","tag":"link","label":"manufacturing_link_solutions_navbar"}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"government","context":"solutions","tag":"link","label":"government_link_solutions_navbar"}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_industries","context":"solutions","tag":"link","label":"view_all_industries_link_solutions_navbar"}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all","context":"resources","tag":"link","label":"view_all_link_resources_navbar"}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"learning_pathways","context":"resources","tag":"link","label":"learning_pathways_link_resources_navbar"}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"white_papers_ebooks_webinars","context":"resources","tag":"link","label":"white_papers_ebooks_webinars_link_resources_navbar"}" href="https://resources.github.com"> White papers, Ebooks, Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"customer_stories","context":"resources","tag":"link","label":"customer_stories_link_resources_navbar"}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"github_sponsors","context":"open_source","tag":"link","label":"github_sponsors_link_open_source_navbar"}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"the_readme_project","context":"open_source","tag":"link","label":"the_readme_project_link_open_source_navbar"}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"topics","context":"open_source","tag":"link","label":"topics_link_open_source_navbar"}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"trending","context":"open_source","tag":"link","label":"trending_link_open_source_navbar"}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"collections","context":"open_source","tag":"link","label":"collections_link_open_source_navbar"}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"enterprise_platform","context":"enterprise","tag":"link","label":"enterprise_platform_link_enterprise_navbar"}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"advanced_security","context":"enterprise","tag":"link","label":"advanced_security_link_enterprise_navbar"}" href="https://github.com/enterprise/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"enterprise","tag":"link","label":"github_copilot_link_enterprise_navbar"}" href="/features/copilot#enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"premium_support","context":"enterprise","tag":"link","label":"premium_support_link_enterprise_navbar"}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{"location":"navbar","action":"pricing","context":"global","tag":"link","label":"pricing_link_global_navbar"}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:mfussenegger/nvim-dap" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="sp4nXVd7P1X9RhzvoLU8999XMGxdQLzw2-1T97ttxHjrZYZnk4_m5iTbMrEJLDMrlQCVVG-NLU_K9KVQ9wGrhA" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="mfussenegger/nvim-dap" data-current-org="" data-current-owner="mfussenegger" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{"location":"navbar","action":"searchbar","context":"global","tag":"input","label":"searchbar_input_global_navbar"}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-3a63aca4-e766-4c23-a4a6-e057e40ae81b" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-3a63aca4-e766-4c23-a4a6-e057e40ae81b" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2"> Search syntax tips </a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="z6tSeOe8TsmOEQDSysLrI3zwqJCx0E3xAHShW8QH7aV06cQNArDOcIAdqyoFo4JizeeRzro6ctrVDdfgW0R45A==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="Ec2Sw4s6kFedvvPQjVij2EGvp+v3cer6NImMf4x1EVOn8joLUjQg7Km/icoTZ1SqBzFXh15sdkv4yhBfNp59cw==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="uy8pAQgDWif77omUFgTRhhpqAfN1J9O5vQajr2rCBOozK+3ulHKUGpE1xusQO9iuM5oXitRuG4lYUP1Shpl3iA==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2Fmfussenegger%2Fnvim-dap%2Fwiki%2FDebug-Adapter-installation" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation","user_id":null}}" data-hydro-click-hmac="74bfef0b3a17123a92e9e07d6748950ea0044b1089014449f1581d9a85adcbd2" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fwiki%2Fshow&source=header-repo&source_repo=mfussenegger%2Fnvim-dap" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation","user_id":null}}" data-hydro-click-hmac="74bfef0b3a17123a92e9e07d6748950ea0044b1089014449f1581d9a85adcbd2" data-analytics-event="{"category":"Sign up","action":"click to sign up for account","label":"ref_page:/<user-name>/<repo-name>/wiki/show;ref_cta:Sign up;ref_loc:header logged out"}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-ae3e935a-af46-498a-813c-e53ad4377e13" aria-labelledby="tooltip-fb133709-4450-46bf-9bd9-dfd869be9361" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-fb133709-4450-46bf-9bd9-dfd869be9361" for="icon-button-ae3e935a-af46-498a-813c-e53ad4377e13" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/mfussenegger/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/mfussenegger"> mfussenegger </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/mfussenegger/nvim-dap">nvim-dap</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <include-fragment src="/mfussenegger/nvim-dap/sponsor_button"></include-fragment> </li> <li> <a href="/login?return_to=%2Fmfussenegger%2Fnvim-dap" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation","user_id":null}}" data-hydro-click-hmac="ffcabb824a27c6a7993f94f2dfbbe09acf394832e0dfda6fceb76ec19f482a9b" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-a67569a1-8a1c-482d-b0e4-4a175c141ad0" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2Fmfussenegger%2Fnvim-dap" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"repo details fork button","repository_id":255639672,"auth_type":"LOG_IN","originating_url":"https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation","user_id":null}}" data-hydro-click-hmac="9642badf1f9257cdeb3ac16a73e15d885944fe6deb668948f21fa4eaf5cd517a" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="207" data-view-component="true" class="Counter">207</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2Fmfussenegger%2Fnvim-dap" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":255639672,"auth_type":"LOG_IN","originating_url":"https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation","user_id":null}}" data-hydro-click-hmac="79448962fb63ece73c992d956f758d95e5b0ba3c8391075aef003fc156e4601b" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="5682 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="5,682" data-view-component="true" class="Counter js-social-count">5.7k</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/mfussenegger/nvim-dap" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /mfussenegger/nvim-dap" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Code","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="issues-tab" href="/mfussenegger/nvim-dap/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /mfussenegger/nvim-dap/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Issues","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> <span data-content="Issues">Issues</span> <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="29" data-view-component="true" class="Counter">29</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/mfussenegger/nvim-dap/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /mfussenegger/nvim-dap/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Pull requests","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="4" data-view-component="true" class="Counter">4</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="discussions-tab" href="/mfussenegger/nvim-dap/discussions" data-tab-item="i3discussions-tab" data-selected-links="repo_discussions /mfussenegger/nvim-dap/discussions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g g" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Discussions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> <span data-content="Discussions">Discussions</span> <span id="discussions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/mfussenegger/nvim-dap/actions" data-tab-item="i4actions-tab" data-selected-links="repo_actions /mfussenegger/nvim-dap/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Actions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="wiki-tab" href="/mfussenegger/nvim-dap/wiki" data-tab-item="i5wiki-tab" data-selected-links="repo_wiki /mfussenegger/nvim-dap/wiki" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g w" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Wiki","target":"UNDERLINE_NAV.TAB"}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> <span data-content="Wiki">Wiki</span> <span id="wiki-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/mfussenegger/nvim-dap/security" data-tab-item="i6security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /mfussenegger/nvim-dap/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Security","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/mfussenegger/nvim-dap/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/mfussenegger/nvim-dap/pulse" data-tab-item="i7insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /mfussenegger/nvim-dap/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Insights","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-button" popovertarget="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-overlay" aria-controls="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-list" aria-haspopup="true" aria-labelledby="tooltip-b2038472-b80f-41d5-a263-4a190ef60fe5" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-b2038472-b80f-41d5-a263-4a190ef60fe5" for="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position id="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-overlay" anchor="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-button" id="action-menu-1c4703d0-3ed2-43dc-9d59-031a2f004824-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-4f11df75-4a85-465b-b6f3-250be43a483a" href="/mfussenegger/nvim-dap" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-486cc372-086c-4fe6-ab40-d2a0cc900105" href="/mfussenegger/nvim-dap/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Issues </span> </a> </li> <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-e0e84f24-1a6c-43b4-8af9-7ac211caab2d" href="/mfussenegger/nvim-dap/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i3discussions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-d8aff543-b271-4a59-b96b-26a0629d7481" href="/mfussenegger/nvim-dap/discussions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Discussions </span> </a> </li> <li hidden="hidden" data-menu-item="i4actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-0e463ac6-c8ac-430f-a0d0-9610ed918f0f" href="/mfussenegger/nvim-dap/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i5wiki-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-c52792ea-a853-4444-8e9a-22608c06d4ab" href="/mfussenegger/nvim-dap/wiki" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Wiki </span> </a> </li> <li hidden="hidden" data-menu-item="i6security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-6911e73e-571e-4978-9207-314637d07d8a" href="/mfussenegger/nvim-dap/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i7insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-6f6897f1-73a2-4bfc-a6c0-ac2bf5b7823a" href="/mfussenegger/nvim-dap/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <div class="clearfix container-xl px-3 px-md-4 px-lg-5 mt-4 page" id="wiki-wrapper"> <div class="d-flex flex-column flex-md-row gh-header"> <h1 class="flex-auto min-width-0 mb-2 mb-md-0 mr-0 mr-md-2 gh-header-title">Debug Adapter installation</h1> <div class="mt-0 mt-lg-1 flex-shrink-0 gh-header-actions"> <a href="#wiki-pages-box" class="d-md-none pl-2 float-right">Jump to bottom</a> <a href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation/_edit" data-view-component="true" class="Button--secondary Button--small Button ml-0"> <span class="Button-content"> <span class="Button-label">Edit</span> </span> </a> <a href="/mfussenegger/nvim-dap/wiki/_new" data-view-component="true" class="Button--primary Button--small Button"> <span class="Button-content"> <span class="Button-label">New page</span> </span> </a> </div> </div> <div class="mt-2 mt-md-1 pb-3 gh-header-meta"> Mathias Fußenegger edited this page <relative-time datetime="2024-10-03T21:42:07Z" class="no-wrap">Oct 3, 2024</relative-time> · <a href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation/_history" data-view-component="true" class="Link Link--underline">184 revisions</a> </div> <div id="wiki-content" class="mt-4"> <div data-view-component="true" class="Layout Layout--flowRow-until-md Layout--sidebarPosition-end Layout--sidebarPosition-flowRow-end"> <div data-view-component="true" class="Layout-main"> <div id="wiki-body" class="gollum-markdown-content"> <div class="markdown-body"> <div class="markdown-heading"><h3 class="heading-element">Contents</h3><a id="user-content-contents" class="anchor" aria-label="Permalink: Contents" href="#contents"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li><a href="#dotnet">.NET (csharp, fsharp)</a></li> <li><a href="#ansible">Ansible</a></li> <li><a href="#bash">Bash via bashdb</a></li> <li><a href="#brightscript">Brightscript</a></li> <li><a href="#ccrust-via-gdb">C/C++/Rust (via gdb native)</a></li> <li><a href="#ccrust-via-codelldb">C/C++/Rust (via codelldb)</a></li> <li><a href="#ccrust-via-lldb-vscode">C/C++/Rust (via lldb-vscode)</a></li> <li><a href="#ccrust-via-vscode-cpptools">C/C++/Rust (via vscode-cpptools)</a></li> <li><a href="#dart">Dart</a></li> <li><a href="#elixir">Elixir</a></li> <li><a href="#go-using-delve-directly">Go (using delve directly)</a></li> <li><a href="#go">Go</a></li> <li><a href="#godot-gdscript">Godot gdscript</a></li> <li><a href="#haskell">Haskell</a></li> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/Java">Java</a></li> <li><a href="#javascript">Javascript/Node</a></li> <li><a href="#javascript-chrome">Javascript/Chrome</a></li> <li><a href="#javascript-deno">Javascript/Deno</a></li> <li><a href="#javascript-firefox">Javascript/Firefox</a></li> <li><a href="#kotlin">Kotlin</a></li> <li><a href="#lua">Lua</a></li> <li><a href="#mockdebug">Mockdebug</a></li> <li><a href="#neovim-lua">Neovim Lua</a></li> <li><a href="#ocaml-earlybird">OCaml earlybird</a></li> <li><a href="#php">PHP</a></li> <li><a href="#perl">Perl</a></li> <li><a href="https://github.com/Willem-J-an/nvim-dap-powershell">PowerShell</a></li> <li><a href="#probe-rs">probe-rs</a></li> <li><a href="#python">Python</a></li> <li><a href="#ruby">Ruby</a></li> <li><a href="#scala">Scala</a></li> <li><a href="#unity">Unity</a></li> </ul> <hr> <p>Some examples below are in lua, if you want to set up <code>nvim-dap</code> in a <code>.vim</code> file, you have to wrap the code blocks like this:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="lua <<EOF -- lua code goes here EOF"><pre class="notranslate"><code>lua <<EOF -- lua code goes here EOF </code></pre></div> <p>See <code>:help lua-commands</code></p> <div class="markdown-heading"><h2 class="heading-element">Ansible</h2><a id="user-content-ansible" class="anchor" aria-label="Permalink: Ansible" href="#ansible"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li>Install <a href="https://github.com/jborean93/ansibug">ansibug</a> <ul> <li> <code>python -m pip install ansibug</code> (If installed in a virtualenv, <code>ansible</code> must be available in the same virtualenv)</li> </ul> </li> <li>Configure an adapter:</li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require("dap") dap.adapters.ansible = { type = "executable", command = "python", -- or "/path/to/virtualenv/bin/python", args = { "-m", "ansibug", "dap" }, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">ansible</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>executable<span class="pl-pds">"</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>python<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> or "/path/to/virtualenv/bin/python",</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>-m<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>ansibug<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">" </span></span>}, }</pre></div> <p>Add a configuration like:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local ansibug_configurations = { { type = "ansible", request = "launch", name = "Debug playbook", playbook = "${file}" }, } dap.configurations["yaml.ansible"] = ansibug_configurations -- You may need to replace "yaml.ansible" with the filetype you use for ansible playbooks -- "yaml.ansible" depends on a `ftdetect/ansible.vim` plugin with: -- au BufRead,BufNewFile */playbooks/*.yml setlocal ft=yaml.ansible -- au BufRead,BufNewFile */playbooks/*.yaml setlocal ft=yaml.ansible"><pre><span class="pl-k">local</span> <span class="pl-smi">ansibug_configurations</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>ansible<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Debug playbook<span class="pl-pds">"</span></span>, <span class="pl-smi">playbook</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span> }, } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>[<span class="pl-s"><span class="pl-pds">"</span>yaml.ansible<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> <span class="pl-smi">ansibug_configurations</span> <span class="pl-c"><span class="pl-c">--</span> You may need to replace "yaml.ansible" with the filetype you use for ansible playbooks</span> <span class="pl-c"><span class="pl-c">--</span> "yaml.ansible" depends on a `ftdetect/ansible.vim` plugin with:</span> <span class="pl-c"><span class="pl-c">--</span> au BufRead,BufNewFile */playbooks/*.yml setlocal ft=yaml.ansible</span> <span class="pl-c"><span class="pl-c">--</span> au BufRead,BufNewFile */playbooks/*.yaml setlocal ft=yaml.ansible</span></pre></div> <p>See <code>Debug Configurations</code> under <a href="https://jborean93.github.io/ansibug/" rel="nofollow">ansibug</a> for all available options.</p> <div class="markdown-heading"><h2 class="heading-element">Python</h2><a id="user-content-python" class="anchor" aria-label="Permalink: Python" href="#python"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install <a href="https://github.com/microsoft/debugpy">debugpy</a> into a virtualenv</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="mkdir .virtualenvs cd .virtualenvs python -m venv debugpy debugpy/bin/python -m pip install debugpy"><pre>mkdir .virtualenvs <span class="pl-c1">cd</span> .virtualenvs python -m venv debugpy debugpy/bin/python -m pip install debugpy</pre></div> <p>You can then either use <a href="https://github.com/mfussenegger/nvim-dap-python">nvim-dap-python</a> - it comes with adapter and configurations definitions - or define them manually as follows:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.adapters.python = function(cb, config) if config.request == 'attach' then ---@diagnostic disable-next-line: undefined-field local port = (config.connect or config).port ---@diagnostic disable-next-line: undefined-field local host = (config.connect or config).host or '127.0.0.1' cb({ type = 'server', port = assert(port, '`connect.port` is required for a python `attach` configuration'), host = host, options = { source_filetype = 'python', }, }) else cb({ type = 'executable', command = 'path/to/virtualenvs/debugpy/bin/python', args = { '-m', 'debugpy.adapter' }, options = { source_filetype = 'python', }, }) end end "><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-en">python</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">cb</span>, <span class="pl-smi">config</span>) <span class="pl-k">if</span> <span class="pl-smi">config</span>.<span class="pl-e">request</span> <span class="pl-k">==</span> <span class="pl-s"><span class="pl-pds">'</span>attach<span class="pl-pds">' </span></span><span class="pl-k">then</span> <span class="pl-c"><span class="pl-c">---</span><span class="pl-k">@diagnostic</span> <span class="pl-k">disable-next-line</span><span class="pl-k">:</span> <span class="pl-c1">undefined-field</span></span> <span class="pl-k">local</span> <span class="pl-smi">port</span> <span class="pl-k">=</span> (<span class="pl-smi">config</span>.<span class="pl-e">connect</span> <span class="pl-k">or</span> <span class="pl-smi">config</span>).<span class="pl-e">port</span> <span class="pl-c"><span class="pl-c">---</span><span class="pl-k">@diagnostic</span> <span class="pl-k">disable-next-line</span><span class="pl-k">:</span> <span class="pl-c1">undefined-field</span></span> <span class="pl-k">local</span> <span class="pl-smi">host</span> <span class="pl-k">=</span> (<span class="pl-smi">config</span>.<span class="pl-e">connect</span> <span class="pl-k">or</span> <span class="pl-smi">config</span>).<span class="pl-e">host</span> <span class="pl-k">or</span> <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span> <span class="pl-c1">cb</span>({ <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>server<span class="pl-pds">'</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-c1">assert</span>(<span class="pl-smi">port</span>, <span class="pl-s"><span class="pl-pds">'</span>`connect.port` is required for a python `attach` configuration<span class="pl-pds">'</span></span>), <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-smi">host</span>, <span class="pl-smi">options</span> <span class="pl-k">=</span> { <span class="pl-smi">source_filetype</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>python<span class="pl-pds">'</span></span>, }, }) <span class="pl-k">else</span> <span class="pl-c1">cb</span>({ <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>path/to/virtualenvs/debugpy/bin/python<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>-m<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>debugpy.adapter<span class="pl-pds">' </span></span>}, <span class="pl-smi">options</span> <span class="pl-k">=</span> { <span class="pl-smi">source_filetype</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>python<span class="pl-pds">'</span></span>, }, }) <span class="pl-k">end</span> <span class="pl-k">end</span> </pre></div> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.configurations.python = { { -- The first three options are required by nvim-dap type = 'python'; -- the type here established the link to the adapter definition: `dap.adapters.python` request = 'launch'; name = "Launch file"; -- Options below are for debugpy, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for supported options program = "${file}"; -- This configuration will launch the current file if used. pythonPath = function() -- debugpy supports launching an application with a different interpreter then the one used to launch debugpy itself. -- The code below looks for a `venv` or `.venv` folder in the current directly and uses the python within. -- You could adapt this - to for example use the `VIRTUAL_ENV` environment variable. local cwd = vim.fn.getcwd() if vim.fn.executable(cwd .. '/venv/bin/python') == 1 then return cwd .. '/venv/bin/python' elseif vim.fn.executable(cwd .. '/.venv/bin/python') == 1 then return cwd .. '/.venv/bin/python' else return '/usr/bin/python' end end; }, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">python</span> <span class="pl-k">=</span> { { <span class="pl-c"><span class="pl-c">--</span> The first three options are required by nvim-dap</span> <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>python<span class="pl-pds">'</span></span>; <span class="pl-c"><span class="pl-c">--</span> the type here established the link to the adapter definition: `dap.adapters.python`</span> <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>; <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch file<span class="pl-pds">"</span></span>; <span class="pl-c"><span class="pl-c">--</span> Options below are for debugpy, see https://github.com/microsoft/debugpy/wiki/Debug-configuration-settings for supported options</span> <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>; <span class="pl-c"><span class="pl-c">--</span> This configuration will launch the current file if used.</span> <span class="pl-en">pythonPath</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-c"><span class="pl-c">--</span> debugpy supports launching an application with a different interpreter then the one used to launch debugpy itself.</span> <span class="pl-c"><span class="pl-c">--</span> The code below looks for a `venv` or `.venv` folder in the current directly and uses the python within.</span> <span class="pl-c"><span class="pl-c">--</span> You could adapt this - to for example use the `VIRTUAL_ENV` environment variable.</span> <span class="pl-k">local</span> <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>() <span class="pl-k">if</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">executable</span>(<span class="pl-smi">cwd</span> <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/venv/bin/python<span class="pl-pds">'</span></span>) <span class="pl-k">==</span> <span class="pl-c1">1</span> <span class="pl-k">then</span> <span class="pl-k">return</span> <span class="pl-smi">cwd</span> <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/venv/bin/python<span class="pl-pds">'</span></span> <span class="pl-k">elseif</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">executable</span>(<span class="pl-smi">cwd</span> <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/.venv/bin/python<span class="pl-pds">'</span></span>) <span class="pl-k">==</span> <span class="pl-c1">1</span> <span class="pl-k">then</span> <span class="pl-k">return</span> <span class="pl-smi">cwd</span> <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/.venv/bin/python<span class="pl-pds">'</span></span> <span class="pl-k">else</span> <span class="pl-k">return</span> <span class="pl-s"><span class="pl-pds">'</span>/usr/bin/python<span class="pl-pds">'</span></span> <span class="pl-k">end</span> <span class="pl-k">end</span>; }, }</pre></div> <p>You can refer to the virtualenv environment variable with</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="command = os.getenv("VIRTUAL_ENV") .. "/bin/python""><pre><span class="pl-c1">command</span> = os.getenv(<span class="pl-s"><span class="pl-pds">"</span>VIRTUAL_ENV<span class="pl-pds">"</span></span>) .. <span class="pl-s"><span class="pl-pds">"</span>/bin/python<span class="pl-pds">"</span></span></pre></div> <div class="markdown-heading"><h2 class="heading-element">Brightscript</h2><a id="user-content-brightscript" class="anchor" aria-label="Permalink: Brightscript" href="#brightscript"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading"><h3 class="heading-element">Setup steps</h3><a id="user-content-setup-steps" class="anchor" aria-label="Permalink: Setup steps" href="#setup-steps"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ol> <li>Install the <a href="https://github.com/rokucommunity/roku-debug/">roku-debug</a> node package. See the bot comment <a href="https://github.com/rokucommunity/roku-debug/pull/173#issuecomment-1813207190">here</a> for an example of how to install.</li> <li>Install <a href="https://nodejs.org/en/download" rel="nofollow">node</a> and <a href="https://www.npmjs.com/package/npx" rel="nofollow">npx</a> </li> <li>Set the <code>ROKU_DEV_TARGET</code> and <code>DEVPASSWORD</code> environment variables to the IP address and password of your Roku device</li> </ol> <p>Example adapter</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.adapters.brightscript = { type = 'executable', command = 'npx', args = { 'roku-debug', '--dap' }, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">brightscript</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>npx<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>roku-debug<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>--dap<span class="pl-pds">' </span></span>}, }</pre></div> <p>Example configuration</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.brs = { { type = 'brightscript', request = 'launch', name = "Debug app", rootDir = "${workspaceFolder}", files = { "manifest", "source/**/*.*", "components/**/*.*", "images/**/*.*", "locale/**/*.*" }, host = "${env:ROKU_DEV_TARGET}", remotePort = 8060, password = "${env:DEVPASSWORD}", outDir = "${workspaceFolder}/out/", enableDebugProtocol = true, fileLogging = false, enableVariablesPanel = true, logLevel = "off" }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">brs</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>brightscript<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Debug app<span class="pl-pds">"</span></span>, <span class="pl-smi">rootDir</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, <span class="pl-smi">files</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>manifest<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>source/**/*.*<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>components/**/*.*<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>images/**/*.*<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>locale/**/*.*<span class="pl-pds">"</span></span> }, <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${env:ROKU_DEV_TARGET}<span class="pl-pds">"</span></span>, <span class="pl-smi">remotePort</span> <span class="pl-k">=</span> <span class="pl-c1">8060</span>, <span class="pl-smi">password</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${env:DEVPASSWORD}<span class="pl-pds">"</span></span>, <span class="pl-smi">outDir</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}/out/<span class="pl-pds">"</span></span>, <span class="pl-smi">enableDebugProtocol</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">fileLogging</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>, <span class="pl-smi">enableVariablesPanel</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">logLevel</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>off<span class="pl-pds">"</span></span> }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">C/C++/Rust (via gdb)</h2><a id="user-content-ccrust-via-gdb" class="anchor" aria-label="Permalink: C/C++/Rust (via gdb)" href="#ccrust-via-gdb"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Requires gdb 14.0+</p> <p>Adapter:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require("dap") dap.adapters.gdb = { type = "executable", command = "gdb", args = { "--interpreter=dap", "--eval-command", "set print pretty on" } }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">gdb</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>executable<span class="pl-pds">"</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>gdb<span class="pl-pds">"</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>--interpreter=dap<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>--eval-command<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>set print pretty on<span class="pl-pds">" </span></span>} }</pre></div> <p>See the <a href="https://sourceware.org/gdb/current/onlinedocs/gdb#Debugger-Adapter-Protocol" rel="nofollow">GDB Debug adapter configuration docs</a> for the configuration options.</p> <p>Some samples:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require("dap") dap.configurations.c = { { name = "Launch", type = "gdb", request = "launch", program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, cwd = "${workspaceFolder}", stopAtBeginningOfMainSubprogram = false, }, { name = "Select and attach to process", type = "gdb", request = "attach", program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, pid = function() local name = vim.fn.input('Executable name (filter): ') return require("dap.utils").pick_process({ filter = name }) end, cwd = '${workspaceFolder}' }, { name = 'Attach to gdbserver :1234', type = 'gdb', request = 'attach', target = 'localhost:1234', program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, cwd = '${workspaceFolder}' }, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">c</span> <span class="pl-k">=</span> { { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch<span class="pl-pds">"</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>gdb<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-en">program</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">return</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">input</span>(<span class="pl-s"><span class="pl-pds">'</span>Path to executable: <span class="pl-pds">'</span></span>, <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>) <span class="pl-k">end</span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, <span class="pl-smi">stopAtBeginningOfMainSubprogram</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>, }, { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Select and attach to process<span class="pl-pds">"</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>gdb<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>attach<span class="pl-pds">"</span></span>, <span class="pl-en">program</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">return</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">input</span>(<span class="pl-s"><span class="pl-pds">'</span>Path to executable: <span class="pl-pds">'</span></span>, <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>) <span class="pl-k">end</span>, <span class="pl-en">pid</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">local</span> <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">input</span>(<span class="pl-s"><span class="pl-pds">'</span>Executable name (filter): <span class="pl-pds">'</span></span>) <span class="pl-k">return</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap.utils<span class="pl-pds">"</span></span>).<span class="pl-c1">pick_process</span>({ <span class="pl-smi">filter</span> <span class="pl-k">=</span> <span class="pl-smi">name</span> }) <span class="pl-k">end</span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}<span class="pl-pds">'</span></span> }, { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Attach to gdbserver :1234<span class="pl-pds">'</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>gdb<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>attach<span class="pl-pds">'</span></span>, <span class="pl-smi">target</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>localhost:1234<span class="pl-pds">'</span></span>, <span class="pl-en">program</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">return</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">input</span>(<span class="pl-s"><span class="pl-pds">'</span>Path to executable: <span class="pl-pds">'</span></span>, <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>) <span class="pl-k">end</span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}<span class="pl-pds">'</span></span> }, }</pre></div> <p>Notes:</p> <ul> <li>To attach, you might need privileges. For Linux, see for example how to use <a href="https://www.kernel.org/doc/html/latest/admin-guide/LSM/Yama.html" rel="nofollow">Yama</a>.</li> <li>To pass some setup to gdb, use <code>--eval-command</code> or <code>--init-eval-command</code> in <code>args</code> list of the adapter, as in the example above (can be used multiple times).</li> </ul> <div class="markdown-heading"><h2 class="heading-element">C/C++/Rust (via <a href="https://github.com/Microsoft/vscode-cpptools">vscode-cpptools</a>)</h2><a id="user-content-ccrust-via-vscode-cpptools" class="anchor" aria-label="Permalink: C/C++/Rust (via vscode-cpptools)" href="#ccrust-via-vscode-cpptools"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>NOTE: recomended for dap ui users</p> <p>Moved to <a href="https://github.com/mfussenegger/nvim-dap/wiki/C-C---Rust-(gdb-via--vscode-cpptools)">C/C++/Rust (cpptools)</a></p> <div class="markdown-heading"><h2 class="heading-element">C/C++/Rust (via <a href="https://github.com/vadimcn/vscode-lldb">codelldb</a>)</h2><a id="user-content-ccrust-via-codelldb" class="anchor" aria-label="Permalink: C/C++/Rust (via codelldb)" href="#ccrust-via-codelldb"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>See <a href="https://github.com/mfussenegger/nvim-dap/wiki/C-C---Rust-(via--codelldb)">C/C++/Rust (codelldb)</a></p> <div class="markdown-heading"><h2 class="heading-element">C/C++/Rust (via lldb-vscode)</h2><a id="user-content-ccrust-via-lldb-vscode" class="anchor" aria-label="Permalink: C/C++/Rust (via lldb-vscode)" href="#ccrust-via-lldb-vscode"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>NOTE: <code>lldb-vscode</code> has been renamed to <code>lldb-dap</code>.</p> <p>Modern LLDB installations come with a binary called <code>lldb-vscode</code> (or <code>lldb-vscode-11</code>). For the following to work, make sure the binaries <code>lldb-vscode</code> depends on (<code>llvm-symbolizer</code>) are in your <code>PATH</code>.</p> <p>Adapter:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.adapters.lldb = { type = 'executable', command = '/usr/bin/lldb-vscode', -- adjust as needed, must be absolute path name = 'lldb' }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">lldb</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>/usr/bin/lldb-vscode<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> adjust as needed, must be absolute path</span> <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>lldb<span class="pl-pds">'</span></span> }</pre></div> <p>Configurations:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.configurations.cpp = { { name = 'Launch', type = 'lldb', request = 'launch', program = function() return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') end, cwd = '${workspaceFolder}', stopOnEntry = false, args = {}, -- 💀 -- if you change `runInTerminal` to true, you might need to change the yama/ptrace_scope setting: -- -- echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope -- -- Otherwise you might get the following error: -- -- Error on launch: Failed to attach to the target process -- -- But you should be aware of the implications: -- https://www.kernel.org/doc/html/latest/admin-guide/LSM/Yama.html -- runInTerminal = false, }, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">cpp</span> <span class="pl-k">=</span> { { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Launch<span class="pl-pds">'</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>lldb<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-en">program</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">return</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">input</span>(<span class="pl-s"><span class="pl-pds">'</span>Path to executable: <span class="pl-pds">'</span></span>, <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>) <span class="pl-k">end</span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}<span class="pl-pds">'</span></span>, <span class="pl-smi">stopOnEntry</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {}, <span class="pl-c"><span class="pl-c">--</span> 💀</span> <span class="pl-c"><span class="pl-c">--</span> if you change `runInTerminal` to true, you might need to change the yama/ptrace_scope setting:</span> <span class="pl-c"><span class="pl-c">--</span></span> <span class="pl-c"><span class="pl-c">--</span> echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope</span> <span class="pl-c"><span class="pl-c">--</span></span> <span class="pl-c"><span class="pl-c">--</span> Otherwise you might get the following error:</span> <span class="pl-c"><span class="pl-c">--</span></span> <span class="pl-c"><span class="pl-c">--</span> Error on launch: Failed to attach to the target process</span> <span class="pl-c"><span class="pl-c">--</span></span> <span class="pl-c"><span class="pl-c">--</span> But you should be aware of the implications:</span> <span class="pl-c"><span class="pl-c">--</span> https://www.kernel.org/doc/html/latest/admin-guide/LSM/Yama.html</span> <span class="pl-c"><span class="pl-c">--</span> runInTerminal = false,</span> }, }</pre></div> <p>You can find more configurations options here:</p> <ul> <li><a href="https://github.com/llvm/llvm-project/tree/main/lldb/tools/lldb-dap#configuration">https://github.com/llvm/llvm-project/tree/main/lldb/tools/lldb-dap#configuration</a></li> <li><a href="https://github.com/llvm/llvm-project/blob/main/lldb/tools/lldb-dap/package.json">https://github.com/llvm/llvm-project/blob/main/lldb/tools/lldb-dap/package.json</a></li> </ul> <p>If you want to use this for Rust and C, add something like this:</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.c = dap.configurations.cpp dap.configurations.rust = dap.configurations.cpp"><pre class="notranslate"><code>dap.configurations.c = dap.configurations.cpp dap.configurations.rust = dap.configurations.cpp </code></pre></div> <p>You can get rust types by adding:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.rust = { { -- ... the previous config goes here ..., initCommands = function() -- Find out where to look for the pretty printer Python module local rustc_sysroot = vim.fn.trim(vim.fn.system('rustc --print sysroot')) local script_import = 'command script import "' .. rustc_sysroot .. '/lib/rustlib/etc/lldb_lookup.py"' local commands_file = rustc_sysroot .. '/lib/rustlib/etc/lldb_commands' local commands = {} local file = io.open(commands_file, 'r') if file then for line in file:lines() do table.insert(commands, line) end file:close() end table.insert(commands, 1, script_import) return commands end, -- ..., } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">rust</span> <span class="pl-k">=</span> { { <span class="pl-c"><span class="pl-c">--</span> ... the previous config goes here ...,</span> <span class="pl-en">initCommands</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-c"><span class="pl-c">--</span> Find out where to look for the pretty printer Python module</span> <span class="pl-k">local</span> <span class="pl-smi">rustc_sysroot</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">trim</span>(<span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">system</span>(<span class="pl-s"><span class="pl-pds">'</span>rustc --print sysroot<span class="pl-pds">'</span></span>)) <span class="pl-k">local</span> <span class="pl-smi">script_import</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>command script import "<span class="pl-pds">' </span></span><span class="pl-k">..</span> <span class="pl-smi">rustc_sysroot</span> <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/lib/rustlib/etc/lldb_lookup.py"<span class="pl-pds">'</span></span> <span class="pl-k">local</span> <span class="pl-smi">commands_file</span> <span class="pl-k">=</span> <span class="pl-smi">rustc_sysroot</span> <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/lib/rustlib/etc/lldb_commands<span class="pl-pds">'</span></span> <span class="pl-k">local</span> <span class="pl-smi">commands</span> <span class="pl-k">=</span> {} <span class="pl-k">local</span> <span class="pl-smi">file</span> <span class="pl-k">=</span> <span class="pl-c1">io.open</span>(<span class="pl-smi">commands_file</span>, <span class="pl-s"><span class="pl-pds">'</span>r<span class="pl-pds">'</span></span>) <span class="pl-k">if</span> <span class="pl-smi">file</span> <span class="pl-k">then</span> <span class="pl-k">for</span> <span class="pl-smi">line</span> <span class="pl-k">in</span> <span class="pl-en">file</span>:<span class="pl-c1">lines</span>() <span class="pl-k">do</span> <span class="pl-c1">table.insert</span>(<span class="pl-smi">commands</span>, <span class="pl-smi">line</span>) <span class="pl-k">end</span> <span class="pl-en">file</span>:<span class="pl-c1">close</span>() <span class="pl-k">end</span> <span class="pl-c1">table.insert</span>(<span class="pl-smi">commands</span>, <span class="pl-c1">1</span>, <span class="pl-smi">script_import</span>) <span class="pl-k">return</span> <span class="pl-smi">commands</span> <span class="pl-k">end</span>, <span class="pl-c"><span class="pl-c">--</span> ...,</span> } }</pre></div> <p>If you want to be able to attach to running processes, add another configuration entry like described here:</p> <ul> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/Cookbook#pick-a-process">https://github.com/mfussenegger/nvim-dap/wiki/Cookbook#pick-a-process</a></li> </ul> <div class="markdown-heading"><h3 class="heading-element">Environment variables</h3><a id="user-content-environment-variables" class="anchor" aria-label="Permalink: Environment variables" href="#environment-variables"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p><code>lldb-vscode</code> by default doesn't inherit the environment variables from the parent. If you want to inherit them, add the <code>env</code> property definition below to your <code>configurations</code> entries.</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" env = function() local variables = {} for k, v in pairs(vim.fn.environ()) do table.insert(variables, string.format("%s=%s", k, v)) end return variables end,"><pre> <span class="pl-en">env</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">local</span> <span class="pl-smi">variables</span> <span class="pl-k">=</span> {} <span class="pl-k">for</span> <span class="pl-smi">k</span>, <span class="pl-smi">v</span> <span class="pl-k">in</span> <span class="pl-c1">pairs</span>(<span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">environ</span>()) <span class="pl-k">do</span> <span class="pl-c1">table.insert</span>(<span class="pl-smi">variables</span>, <span class="pl-c1">string.format</span>(<span class="pl-s"><span class="pl-pds">"</span>%s=%s<span class="pl-pds">"</span></span>, <span class="pl-smi">k</span>, <span class="pl-smi">v</span>)) <span class="pl-k">end</span> <span class="pl-k">return</span> <span class="pl-smi">variables</span> <span class="pl-k">end</span>,</pre></div> <div class="markdown-heading"><h3 class="heading-element">LLDB commands</h3><a id="user-content-lldb-commands" class="anchor" aria-label="Permalink: LLDB commands" href="#lldb-commands"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>You can execute LLDB debugger commands such as <code>bt</code>, <code>parray</code> or <code>register read rax</code> on the <code>dap></code> command line by prefixing them with <code>`</code> (for example <code>`bt</code>).</p> <div class="markdown-heading"><h3 class="heading-element">Building lldb-vscode</h3><a id="user-content-building-lldb-vscode" class="anchor" aria-label="Permalink: Building lldb-vscode" href="#building-lldb-vscode"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Adapted from <a href="https://github.com/llvm/llvm-project/blob/d480f968ad8b56d3ee4a6b6df5532d485b0ad01e/clang-tools-extra/clangd/README.md">build instructions for clangd</a></p> <p>For a minimal setup on building lldb-vscode:</p> <ul> <li> <p>Clone the LLVM repo to <code>$LLVM_ROOT</code>.</p> </li> <li> <p>Create a build directory, for example at <code>$LLVM_ROOT/build</code>.</p> </li> <li> <p>Inside the build directory run: <code>cmake $LLVM_ROOT/llvm/ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="lldb" -G Ninja</code>.</p> <ul> <li>We suggest building in <code>Release</code> mode as building DEBUG binaries requires considerably more resources. You can check <a href="https://llvm.org/docs/CMake.html" rel="nofollow">Building LLVM with CMake documentation</a> for more details about cmake flags.</li> </ul> </li> <li> <p>Afterwards you can build lldb-vscode with <code>cmake --build $LLVM_ROOT/build --target lldb-vscode</code>.</p> </li> <li> <p>same for lldb-server <code>cmake --build $LLVM_ROOT/build --target lldb-server</code>.</p> </li> </ul> <div class="markdown-heading"><h3 class="heading-element">Installation with Homebrew</h3><a id="user-content-installation-with-homebrew" class="anchor" aria-label="Permalink: Installation with Homebrew" href="#installation-with-homebrew"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>An easy way to install <code>lldb-vscode</code> is to use <code>brew</code></p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="$ brew install llvm"><pre>$ brew install llvm</pre></div> <p>Then executable file <code>lldb-vscode</code> and <code>lldb-server</code> are under this path <code>$(brew --prefix llvm)/bin</code>.</p> <div class="markdown-heading"><h2 class="heading-element">Probe-rs</h2><a id="user-content-probe-rs" class="anchor" aria-label="Permalink: Probe-rs" href="#probe-rs"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Probe-rs provides debugging for embedded rust (and other languages). It provides a feature to write data via RTT to the debug probe and provide this information during debugging. See <a href="https://probe.rs/" rel="nofollow">probe-rs</a> for instructions. I tested the following configuration within astronvim which configures the automatic import of .vscode/launch.json. Since the configuration can be expected to vary strongly from project to project the config relies on launch.json.</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require "dap" if not dap.adapters then dap.adapters = {} end dap.adapters["probe-rs-debug"] = { type = "server", port = "${port}", executable = { command = vim.fn.expand "$HOME/.cargo/bin/probe-rs", args = { "dap-server", "--port", "${port}" }, }, } -- Connect the probe-rs-debug with rust files. Configuration of the debugger is done via project_folder/.vscode/launch.json require("dap.ext.vscode").type_to_filetypes["probe-rs-debug"] = { "rust" } -- Set up of handlers for RTT and probe-rs messages. -- In addition to nvim-dap-ui I write messages to a probe-rs.log in project folder -- If RTT is enabled, probe-rs sends an event after init of a channel. This has to be confirmed or otherwise probe-rs wont sent the rtt data. dap.listeners.before["event_probe-rs-rtt-channel-config"]["plugins.nvim-dap-probe-rs"] = function(session, body) local utils = require "dap.utils" utils.notify( string.format('probe-rs: Opening RTT channel %d with name "%s"!', body.channelNumber, body.channelName) ) local file = io.open("probe-rs.log", "a") if file then file:write( string.format( '%s: Opening RTT channel %d with name "%s"!\n', os.date "%Y-%m-%d-T%H:%M:%S", body.channelNumber, body.channelName ) ) end if file then file:close() end session:request("rttWindowOpened", { body.channelNumber, true }) end -- After confirming RTT window is open, we will get rtt-data-events. -- I print them to the dap-repl, which is one way and not separated. -- If you have better ideas, let me know. dap.listeners.before["event_probe-rs-rtt-data"]["plugins.nvim-dap-probe-rs"] = function(_, body) local message = string.format("%s: RTT-Channel %d - Message: %s", os.date "%Y-%m-%d-T%H:%M:%S", body.channelNumber, body.data) local repl = require "dap.repl" repl.append(message) local file = io.open("probe-rs.log", "a") if file then file:write(message) end if file then file:close() end end -- Probe-rs can send messages, which are handled with this listener. dap.listeners.before["event_probe-rs-show-message"]["plugins.nvim-dap-probe-rs"] = function(_, body) local message = string.format("%s: probe-rs message: %s", os.date "%Y-%m-%d-T%H:%M:%S", body.message) local repl = require "dap.repl" repl.append(message) local file = io.open("probe-rs.log", "a") if file then file:write(message) end if file then file:close() end end"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span> <span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span> <span class="pl-k">if</span> <span class="pl-k">not</span> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span> <span class="pl-k">then</span> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span> <span class="pl-k">=</span> {} <span class="pl-k">end</span> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>[<span class="pl-s"><span class="pl-pds">"</span>probe-rs-debug<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>server<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">"</span></span>, <span class="pl-smi">executable</span> <span class="pl-k">=</span> { <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">expand</span> <span class="pl-s"><span class="pl-pds">"</span>$HOME/.cargo/bin/probe-rs<span class="pl-pds">"</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>dap-server<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>--port<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">" </span></span>}, }, } <span class="pl-c"><span class="pl-c">--</span> Connect the probe-rs-debug with rust files. Configuration of the debugger is done via project_folder/.vscode/launch.json</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap.ext.vscode<span class="pl-pds">"</span></span>).<span class="pl-e">type_to_filetypes</span>[<span class="pl-s"><span class="pl-pds">"</span>probe-rs-debug<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>rust<span class="pl-pds">" </span></span>} <span class="pl-c"><span class="pl-c">--</span> Set up of handlers for RTT and probe-rs messages.</span> <span class="pl-c"><span class="pl-c">--</span> In addition to nvim-dap-ui I write messages to a probe-rs.log in project folder</span> <span class="pl-c"><span class="pl-c">--</span> If RTT is enabled, probe-rs sends an event after init of a channel. This has to be confirmed or otherwise probe-rs wont sent the rtt data.</span> <span class="pl-smi">dap</span>.<span class="pl-e">listeners</span>.<span class="pl-e">before</span>[<span class="pl-s"><span class="pl-pds">"</span>event_probe-rs-rtt-channel-config<span class="pl-pds">"</span></span>][<span class="pl-s"><span class="pl-pds">"</span>plugins.nvim-dap-probe-rs<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">session</span>, <span class="pl-smi">body</span>) <span class="pl-k">local</span> <span class="pl-smi">utils</span> <span class="pl-k">=</span> <span class="pl-c1">require</span> <span class="pl-s"><span class="pl-pds">"</span>dap.utils<span class="pl-pds">"</span></span> <span class="pl-smi">utils</span>.<span class="pl-c1">notify</span>( <span class="pl-c1">string.format</span>(<span class="pl-s"><span class="pl-pds">'</span>probe-rs: Opening RTT channel %d with name "%s"!<span class="pl-pds">'</span></span>, <span class="pl-smi">body</span>.<span class="pl-e">channelNumber</span>, <span class="pl-smi">body</span>.<span class="pl-e">channelName</span>) ) <span class="pl-k">local</span> <span class="pl-smi">file</span> <span class="pl-k">=</span> <span class="pl-c1">io.open</span>(<span class="pl-s"><span class="pl-pds">"</span>probe-rs.log<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>a<span class="pl-pds">"</span></span>) <span class="pl-k">if</span> <span class="pl-smi">file</span> <span class="pl-k">then</span> <span class="pl-en">file</span>:<span class="pl-c1">write</span>( <span class="pl-c1">string.format</span>( <span class="pl-s"><span class="pl-pds">'</span>%s: Opening RTT channel %d with name "%s"!<span class="pl-cce">\n</span><span class="pl-pds">'</span></span>, <span class="pl-c1">os.date</span> <span class="pl-s"><span class="pl-pds">"</span>%Y-%m-%d-T%H:%M:%S<span class="pl-pds">"</span></span>, <span class="pl-smi">body</span>.<span class="pl-e">channelNumber</span>, <span class="pl-smi">body</span>.<span class="pl-e">channelName</span> ) ) <span class="pl-k">end</span> <span class="pl-k">if</span> <span class="pl-smi">file</span> <span class="pl-k">then</span> <span class="pl-en">file</span>:<span class="pl-c1">close</span>() <span class="pl-k">end</span> <span class="pl-en">session</span>:<span class="pl-c1">request</span>(<span class="pl-s"><span class="pl-pds">"</span>rttWindowOpened<span class="pl-pds">"</span></span>, { <span class="pl-smi">body</span>.<span class="pl-e">channelNumber</span>, <span class="pl-c1">true</span> }) <span class="pl-k">end</span> <span class="pl-c"><span class="pl-c">--</span> After confirming RTT window is open, we will get rtt-data-events.</span> <span class="pl-c"><span class="pl-c">--</span> I print them to the dap-repl, which is one way and not separated.</span> <span class="pl-c"><span class="pl-c">--</span> If you have better ideas, let me know.</span> <span class="pl-smi">dap</span>.<span class="pl-e">listeners</span>.<span class="pl-e">before</span>[<span class="pl-s"><span class="pl-pds">"</span>event_probe-rs-rtt-data<span class="pl-pds">"</span></span>][<span class="pl-s"><span class="pl-pds">"</span>plugins.nvim-dap-probe-rs<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">_</span>, <span class="pl-smi">body</span>) <span class="pl-k">local</span> <span class="pl-smi">message</span> <span class="pl-k">=</span> <span class="pl-c1">string.format</span>(<span class="pl-s"><span class="pl-pds">"</span>%s: RTT-Channel %d - Message: %s<span class="pl-pds">"</span></span>, <span class="pl-c1">os.date</span> <span class="pl-s"><span class="pl-pds">"</span>%Y-%m-%d-T%H:%M:%S<span class="pl-pds">"</span></span>, <span class="pl-smi">body</span>.<span class="pl-e">channelNumber</span>, <span class="pl-smi">body</span>.<span class="pl-e">data</span>) <span class="pl-k">local</span> <span class="pl-smi">repl</span> <span class="pl-k">=</span> <span class="pl-c1">require</span> <span class="pl-s"><span class="pl-pds">"</span>dap.repl<span class="pl-pds">"</span></span> <span class="pl-smi">repl</span>.<span class="pl-c1">append</span>(<span class="pl-smi">message</span>) <span class="pl-k">local</span> <span class="pl-smi">file</span> <span class="pl-k">=</span> <span class="pl-c1">io.open</span>(<span class="pl-s"><span class="pl-pds">"</span>probe-rs.log<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>a<span class="pl-pds">"</span></span>) <span class="pl-k">if</span> <span class="pl-smi">file</span> <span class="pl-k">then</span> <span class="pl-en">file</span>:<span class="pl-c1">write</span>(<span class="pl-smi">message</span>) <span class="pl-k">end</span> <span class="pl-k">if</span> <span class="pl-smi">file</span> <span class="pl-k">then</span> <span class="pl-en">file</span>:<span class="pl-c1">close</span>() <span class="pl-k">end</span> <span class="pl-k">end</span> <span class="pl-c"><span class="pl-c">--</span> Probe-rs can send messages, which are handled with this listener.</span> <span class="pl-smi">dap</span>.<span class="pl-e">listeners</span>.<span class="pl-e">before</span>[<span class="pl-s"><span class="pl-pds">"</span>event_probe-rs-show-message<span class="pl-pds">"</span></span>][<span class="pl-s"><span class="pl-pds">"</span>plugins.nvim-dap-probe-rs<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">_</span>, <span class="pl-smi">body</span>) <span class="pl-k">local</span> <span class="pl-smi">message</span> <span class="pl-k">=</span> <span class="pl-c1">string.format</span>(<span class="pl-s"><span class="pl-pds">"</span>%s: probe-rs message: %s<span class="pl-pds">"</span></span>, <span class="pl-c1">os.date</span> <span class="pl-s"><span class="pl-pds">"</span>%Y-%m-%d-T%H:%M:%S<span class="pl-pds">"</span></span>, <span class="pl-smi">body</span>.<span class="pl-e">message</span>) <span class="pl-k">local</span> <span class="pl-smi">repl</span> <span class="pl-k">=</span> <span class="pl-c1">require</span> <span class="pl-s"><span class="pl-pds">"</span>dap.repl<span class="pl-pds">"</span></span> <span class="pl-smi">repl</span>.<span class="pl-c1">append</span>(<span class="pl-smi">message</span>) <span class="pl-k">local</span> <span class="pl-smi">file</span> <span class="pl-k">=</span> <span class="pl-c1">io.open</span>(<span class="pl-s"><span class="pl-pds">"</span>probe-rs.log<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>a<span class="pl-pds">"</span></span>) <span class="pl-k">if</span> <span class="pl-smi">file</span> <span class="pl-k">then</span> <span class="pl-en">file</span>:<span class="pl-c1">write</span>(<span class="pl-smi">message</span>) <span class="pl-k">end</span> <span class="pl-k">if</span> <span class="pl-smi">file</span> <span class="pl-k">then</span> <span class="pl-en">file</span>:<span class="pl-c1">close</span>() <span class="pl-k">end</span> <span class="pl-k">end</span></pre></div> <div class="markdown-heading"><h2 class="heading-element">Mockdebug</h2><a id="user-content-mockdebug" class="anchor" aria-label="Permalink: Mockdebug" href="#mockdebug"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Vscode offers a <a href="https://github.com/Microsoft/vscode-mock-debug">mock implementation for a debug adapter for testing</a>. It can "debug" READMEs.</p> <p>Clone the repo and run npm:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="git clone https://github.com/Microsoft/vscode-mock-debug.git cd vscode-mock-debug npm install"><pre>git clone https://github.com/Microsoft/vscode-mock-debug.git <span class="pl-c1">cd</span> vscode-mock-debug npm install</pre></div> <p>Add the adapter and configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" local dap = require "dap" dap.adapters.markdown = { type = "executable", name = "mockdebug", command = "node", args = {"./out/debugAdapter.js"}, cwd = "path/to/vscode-mock-debug/" } dap.configurations.markdown = { { type = "mock", request = "launch", name = "mock test", program = "/path/to/a/readme.md", stopOnEntry = true, debugServer = 4711 } }"><pre> <span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span> <span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">markdown</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>executable<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>mockdebug<span class="pl-pds">"</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>node<span class="pl-pds">"</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">"</span>./out/debugAdapter.js<span class="pl-pds">"</span></span>}, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>path/to/vscode-mock-debug/<span class="pl-pds">"</span></span> } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">markdown</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>mock<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>mock test<span class="pl-pds">"</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>/path/to/a/readme.md<span class="pl-pds">"</span></span>, <span class="pl-smi">stopOnEntry</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">debugServer</span> <span class="pl-k">=</span> <span class="pl-c1">4711</span> } }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Go</h2><a id="user-content-go" class="anchor" aria-label="Permalink: Go" href="#go"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li> <p>Install <a href="https://github.com/go-delve/delve/tree/master/Documentation/installation">delve</a></p> <ul> <li><code>go install github.com/go-delve/delve/cmd/dlv@latest</code></li> <li>or via package manager (<code>pacman -S delve</code>)</li> </ul> </li> <li> <p>Install <a href="https://github.com/golang/vscode-go">vscode-go</a></p> <ul> <li><code>git clone https://github.com/golang/vscode-go</code></li> <li><code>cd vscode-go/extension</code></li> <li><code>npm install</code></li> <li><code>npm run compile</code></li> </ul> </li> <li> <p>Add the adapter and configuration:</p> </li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.go = { type = 'executable'; command = 'node'; args = {os.getenv('HOME') .. '/dev/golang/vscode-go/extension/dist/debugAdapter.js'}; } dap.configurations.go = { { type = 'go'; name = 'Debug'; request = 'launch'; showLog = false; program = "${file}"; dlvToolPath = vim.fn.exepath('dlv') -- Adjust to where delve is installed }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">go</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>; <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>node<span class="pl-pds">'</span></span>; <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-c1">os.getenv</span>(<span class="pl-s"><span class="pl-pds">'</span>HOME<span class="pl-pds">'</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/dev/golang/vscode-go/extension/dist/debugAdapter.js<span class="pl-pds">'</span></span>}; } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">go</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>go<span class="pl-pds">'</span></span>; <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Debug<span class="pl-pds">'</span></span>; <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>; <span class="pl-smi">showLog</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>; <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>; <span class="pl-smi">dlvToolPath</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">exepath</span>(<span class="pl-s"><span class="pl-pds">'</span>dlv<span class="pl-pds">'</span></span>) <span class="pl-c"><span class="pl-c">--</span> Adjust to where delve is installed</span> }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Go (using delve directly)</h2><a id="user-content-go-using-delve-directly" class="anchor" aria-label="Permalink: Go (using delve directly)" href="#go-using-delve-directly"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Newer version of delve experimentally implement the DAP directly so that it can be used without installing vscode-go. <a href="https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv_dap.md">More info</a></p> <p>Install delve:</p> <ul> <li><code>go install github.com/go-delve/delve/cmd/dlv@latest</code></li> <li>or via package manager. For example <code>pacman -S delve</code> </li> </ul> <p>Once delve is installed you can use <a href="https://github.com/leoluz/nvim-dap-go">nvim-dap-go</a> (a nvim-dap extension) to automatically configure <code>delve</code> running in dap mode. The extension also allows debugging individual Go tests.</p> <p>If you prefer to provide your own configuration, you will need to setup the <code>dap.adapters.go</code> and the <code>dap.configurations.go</code> like:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.delve = function(callback, config) if config.mode == 'remote' and config.request == 'attach' then callback({ type = 'server', host = config.host or '127.0.0.1', port = config.port or '38697' }) else callback({ type = 'server', port = '${port}', executable = { command = 'dlv', args = { 'dap', '-l', '127.0.0.1:${port}', '--log', '--log-output=dap' }, detached = vim.fn.has("win32") == 0, } }) end end -- https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv_dap.md dap.configurations.go = { { type = "delve", name = "Debug", request = "launch", program = "${file}" }, { type = "delve", name = "Debug test", -- configuration for debugging test files request = "launch", mode = "test", program = "${file}" }, -- works with go.mod packages and sub packages { type = "delve", name = "Debug test (go.mod)", request = "launch", mode = "test", program = "./${relativeFileDirname}" } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-en">delve</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">callback</span>, <span class="pl-smi">config</span>) <span class="pl-k">if</span> <span class="pl-smi">config</span>.<span class="pl-e">mode</span> <span class="pl-k">==</span> <span class="pl-s"><span class="pl-pds">'</span>remote<span class="pl-pds">' </span></span><span class="pl-k">and</span> <span class="pl-smi">config</span>.<span class="pl-e">request</span> <span class="pl-k">==</span> <span class="pl-s"><span class="pl-pds">'</span>attach<span class="pl-pds">' </span></span><span class="pl-k">then</span> <span class="pl-c1">callback</span>({ <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>server<span class="pl-pds">'</span></span>, <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-smi">config</span>.<span class="pl-e">host</span> <span class="pl-k">or</span> <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-smi">config</span>.<span class="pl-e">port</span> <span class="pl-k">or</span> <span class="pl-s"><span class="pl-pds">'</span>38697<span class="pl-pds">'</span></span> }) <span class="pl-k">else</span> <span class="pl-c1">callback</span>({ <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>server<span class="pl-pds">'</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${port}<span class="pl-pds">'</span></span>, <span class="pl-smi">executable</span> <span class="pl-k">=</span> { <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>dlv<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>-l<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1:${port}<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>--log<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>--log-output=dap<span class="pl-pds">' </span></span>}, <span class="pl-smi">detached</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">has</span>(<span class="pl-s"><span class="pl-pds">"</span>win32<span class="pl-pds">"</span></span>) <span class="pl-k">==</span> <span class="pl-c1">0</span>, } }) <span class="pl-k">end</span> <span class="pl-k">end</span> <span class="pl-c"><span class="pl-c">--</span> https://github.com/go-delve/delve/blob/master/Documentation/usage/dlv_dap.md</span> <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">go</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>delve<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Debug<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span> }, { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>delve<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Debug test<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> configuration for debugging test files</span> <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">mode</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>test<span class="pl-pds">"</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span> }, <span class="pl-c"><span class="pl-c">--</span> works with go.mod packages and sub packages </span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>delve<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Debug test (go.mod)<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">mode</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>test<span class="pl-pds">"</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>./${relativeFileDirname}<span class="pl-pds">"</span></span> } }</pre></div> <p>If you prefer to start delve manually, you can use the following adapter definition instead:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" dap.adapters.delve = { type = "server", host = "127.0.0.1", port = 38697, }"><pre> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">delve</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>server<span class="pl-pds">"</span></span>, <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>127.0.0.1<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-c1">38697</span>, }</pre></div> <p>And start delve like this:</p> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dlv dap -l 127.0.0.1:38697 --log --log-output="dap""><pre>dlv dap -l 127.0.0.1:38697 --log --log-output=<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span></pre></div> <div class="markdown-heading"><h2 class="heading-element">Ruby</h2><a id="user-content-ruby" class="anchor" aria-label="Permalink: Ruby" href="#ruby"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Via <a href="https://github.com/suketa/nvim-dap-ruby">nvim-dap-ruby</a> or manually:</p> <div class="markdown-heading"><h3 class="heading-element">with Ruby Debug</h3><a id="user-content-with-ruby-debug" class="anchor" aria-label="Permalink: with Ruby Debug" href="#with-ruby-debug"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Add <a href="https://github.com/ruby/debug"><code>debug</code></a> to your <code>Gemfile</code></p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.ruby = function(callback, config) callback { type = "server", host = "127.0.0.1", port = "${port}", executable = { command = "bundle", args = { "exec", "rdbg", "-n", "--open", "--port", "${port}", "-c", "--", "bundle", "exec", config.command, config.script, }, }, } end dap.configurations.ruby = { { type = "ruby", name = "debug current file", request = "attach", localfs = true, command = "ruby", script = "${file}", }, { type = "ruby", name = "run current spec file", request = "attach", localfs = true, command = "rspec", script = "${file}", }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-en">ruby</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">callback</span>, <span class="pl-smi">config</span>) <span class="pl-c1">callback</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>server<span class="pl-pds">"</span></span>, <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>127.0.0.1<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">"</span></span>, <span class="pl-smi">executable</span> <span class="pl-k">=</span> { <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>bundle<span class="pl-pds">"</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>exec<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>rdbg<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>-n<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>--open<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>--port<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>-c<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>--<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>bundle<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>exec<span class="pl-pds">"</span></span>, <span class="pl-smi">config</span>.<span class="pl-e">command</span>, <span class="pl-smi">config</span>.<span class="pl-e">script</span>, }, }, } <span class="pl-k">end</span> <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">ruby</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>ruby<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>debug current file<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>attach<span class="pl-pds">"</span></span>, <span class="pl-smi">localfs</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>ruby<span class="pl-pds">"</span></span>, <span class="pl-smi">script</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>, }, { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>ruby<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>run current spec file<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>attach<span class="pl-pds">"</span></span>, <span class="pl-smi">localfs</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>rspec<span class="pl-pds">"</span></span>, <span class="pl-smi">script</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>, }, }</pre></div> <div class="markdown-heading"><h3 class="heading-element">with redapt</h3><a id="user-content-with-redapt" class="anchor" aria-label="Permalink: with redapt" href="#with-redapt"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li>Install <a href="https://github.com/castwide/readapt">readapt</a> </li> <li>Add the adapter and configuration:</li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.adapters.ruby = { type = 'executable'; command = 'bundle'; args = {'exec', 'readapt', 'stdio'}; } dap.configurations.ruby = { { type = 'ruby'; request = 'launch'; name = 'Rails'; program = 'bundle'; programArgs = {'exec', 'rails', 's'}; useBundler = true; }, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">ruby</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>; <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>bundle<span class="pl-pds">'</span></span>; <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">'</span>exec<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>readapt<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>stdio<span class="pl-pds">'</span></span>}; } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">ruby</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>ruby<span class="pl-pds">'</span></span>; <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>; <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Rails<span class="pl-pds">'</span></span>; <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>bundle<span class="pl-pds">'</span></span>; <span class="pl-smi">programArgs</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">'</span>exec<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>rails<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>s<span class="pl-pds">'</span></span>}; <span class="pl-smi">useBundler</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>; }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Dart</h2><a id="user-content-dart" class="anchor" aria-label="Permalink: Dart" href="#dart"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Note that your SDK path might be different. <code>fvm</code> users will also need to provide the correct path.</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.dart = { { type = "dart", request = "launch", name = "Launch dart", dartSdkPath = "/opt/flutter/bin/cache/dart-sdk/bin/dart", -- ensure this is correct flutterSdkPath = "/opt/flutter/bin/flutter", -- ensure this is correct program = "${workspaceFolder}/lib/main.dart", -- ensure this is correct cwd = "${workspaceFolder}", }, { type = "flutter", request = "launch", name = "Launch flutter", dartSdkPath = "/opt/flutter/bin/cache/dart-sdk/bin/dart", -- ensure this is correct flutterSdkPath = "/opt/flutter/bin/flutter", -- ensure this is correct program = "${workspaceFolder}/lib/main.dart", -- ensure this is correct cwd = "${workspaceFolder}", } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">dart</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>dart<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch dart<span class="pl-pds">"</span></span>, <span class="pl-smi">dartSdkPath</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>/opt/flutter/bin/cache/dart-sdk/bin/dart<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> ensure this is correct</span> <span class="pl-smi">flutterSdkPath</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>/opt/flutter/bin/flutter<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> ensure this is correct</span> <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}/lib/main.dart<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> ensure this is correct</span> <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, }, { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>flutter<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch flutter<span class="pl-pds">"</span></span>, <span class="pl-smi">dartSdkPath</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>/opt/flutter/bin/cache/dart-sdk/bin/dart<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> ensure this is correct</span> <span class="pl-smi">flutterSdkPath</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>/opt/flutter/bin/flutter<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> ensure this is correct</span> <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}/lib/main.dart<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> ensure this is correct</span> <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, } }</pre></div> <p>For the debug adapter, you have two options:</p> <ul> <li>Install the mason package <code>dart-debug-adapter</code> </li> <li>Use the Dart CLI's built-in adapter: <code>dart debug_adapter</code> (recommended)</li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="-- Dart CLI adapter (recommended) dap.adapters.dart = { type = 'executable', command = 'dart', -- if you're using fvm, you'll need to provide the full path to dart (dart.exe for windows users), or you could prepend the fvm command args = { 'debug_adapter' }, -- windows users will need to set 'detached' to false options = { detached = false, } } dap.adapters.flutter = { type = 'executable', command = 'flutter', -- if you're using fvm, you'll need to provide the full path to flutter (flutter.bat for windows users), or you could prepend the fvm command args = { 'debug_adapter' }, -- windows users will need to set 'detached' to false options = { detached = false, } }"><pre><span class="pl-c"><span class="pl-c">--</span> Dart CLI adapter (recommended)</span> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">dart</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>dart<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> if you're using fvm, you'll need to provide the full path to dart (dart.exe for windows users), or you could prepend the fvm command</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>debug_adapter<span class="pl-pds">' </span></span>}, <span class="pl-c"><span class="pl-c">--</span> windows users will need to set 'detached' to false</span> <span class="pl-smi">options</span> <span class="pl-k">=</span> { <span class="pl-smi">detached</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>, } } <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">flutter</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>flutter<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> if you're using fvm, you'll need to provide the full path to flutter (flutter.bat for windows users), or you could prepend the fvm command</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>debug_adapter<span class="pl-pds">' </span></span>}, <span class="pl-c"><span class="pl-c">--</span> windows users will need to set 'detached' to false</span> <span class="pl-smi">options</span> <span class="pl-k">=</span> { <span class="pl-smi">detached</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>, } }</pre></div> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="-- Node based adapter (Legacy) dap.adapters.dart = { type = 'executable', command = vim.fn.stdpath('data')..'/mason/bin/dart-debug-adapter', -- dart-debug-adapter.cmd for windows users args = { 'dart' } } dap.adapters.flutter = { type = 'executable', command = vim.fn.stdpath('data')..'/mason/bin/dart-debug-adapter', -- dart-debug-adapter.cmd for windows users args = { 'flutter' } }"><pre><span class="pl-c"><span class="pl-c">--</span> Node based adapter (Legacy)</span> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">dart</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">stdpath</span>(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>)<span class="pl-k">..</span><span class="pl-s"><span class="pl-pds">'</span>/mason/bin/dart-debug-adapter<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> dart-debug-adapter.cmd for windows users</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>dart<span class="pl-pds">' </span></span>} } <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">flutter</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">stdpath</span>(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>)<span class="pl-k">..</span><span class="pl-s"><span class="pl-pds">'</span>/mason/bin/dart-debug-adapter<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> dart-debug-adapter.cmd for windows users</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>flutter<span class="pl-pds">' </span></span>} }</pre></div> <p>If nothing hapens when you run <code>:DapContinue</code>, make sure:</p> <ul> <li>You've <code>:cd</code> the root dir of the project (Normally your program code is in <code>/lib</code>. Run DAP a directory above from there, that's the root).</li> <li>If still fails, check <code>:DapShowLog</code>.</li> <li>If you are using flutter, make sure the project is valid by running <code>flutter create .</code> on a clean environment.</li> </ul> <div class="markdown-heading"><h2 class="heading-element">Haskell</h2><a id="user-content-haskell" class="anchor" aria-label="Permalink: Haskell" href="#haskell"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li>Install <a href="https://github.com/phoityne/haskell-debug-adapter">haskell-debug-adapter</a> <ul> <li><code>stack install haskell-dap ghci-dap haskell-debug-adapter</code></li> </ul> </li> <li>Add the adapter and configuration:</li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.haskell = { type = 'executable'; command = 'haskell-debug-adapter'; args = {'--hackage-version=0.0.33.0'}; } dap.configurations.haskell = { { type = 'haskell', request = 'launch', name = 'Debug', workspace = '${workspaceFolder}', startup = "${file}", stopOnEntry = true, logFile = vim.fn.stdpath('data') .. '/haskell-dap.log', logLevel = 'WARNING', ghciEnv = vim.empty_dict(), ghciPrompt = "λ: ", -- Adjust the prompt to the prompt you see when you invoke the stack ghci command below ghciInitialPrompt = "λ: ", ghciCmd= "stack ghci --test --no-load --no-build --main-is TARGET --ghci-options -fprint-evld-with-show", }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">haskell</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>; <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>haskell-debug-adapter<span class="pl-pds">'</span></span>; <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">'</span>--hackage-version=0.0.33.0<span class="pl-pds">'</span></span>}; } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">haskell</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>haskell<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Debug<span class="pl-pds">'</span></span>, <span class="pl-smi">workspace</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}<span class="pl-pds">'</span></span>, <span class="pl-smi">startup</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>, <span class="pl-smi">stopOnEntry</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">logFile</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">stdpath</span>(<span class="pl-s"><span class="pl-pds">'</span>data<span class="pl-pds">'</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/haskell-dap.log<span class="pl-pds">'</span></span>, <span class="pl-smi">logLevel</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>WARNING<span class="pl-pds">'</span></span>, <span class="pl-smi">ghciEnv</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-c1">empty_dict</span>(), <span class="pl-smi">ghciPrompt</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>λ: <span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> Adjust the prompt to the prompt you see when you invoke the stack ghci command below </span> <span class="pl-smi">ghciInitialPrompt</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>λ: <span class="pl-pds">"</span></span>, <span class="pl-smi">ghciCmd</span><span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>stack ghci --test --no-load --no-build --main-is TARGET --ghci-options -fprint-evld-with-show<span class="pl-pds">"</span></span>, }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Javascript</h2><a id="user-content-javascript" class="anchor" aria-label="Permalink: Javascript" href="#javascript"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading"><h3 class="heading-element">vscode-js-debug</h3><a id="user-content-vscode-js-debug" class="anchor" aria-label="Permalink: vscode-js-debug" href="#vscode-js-debug"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>A DAP-compatible JavaScript debugger.</p> <p>Be aware that this package contains 2 debugger executables:</p> <ul> <li> <code>vsDebugServer.js</code> vscode specific (to make it work with <code>nvim-dap</code> is recommended to use <a href="https://github.com/mxsdev/nvim-dap-vscode-js">nvim-dap-vscode-js</a> plugin which provides the adapter definition and configurations. See the documentation on that repo for installation instructions)</li> <li> <code>dapDebugServer.js</code> implemented since <a href="https://github.com/microsoft/vscode-js-debug/pull/1614#issue-1638485878">vscode-js-debug v1.77.0</a>. All examples below that use <code>dapDebugServer</code> require you to use this executable instead.</li> </ul> <p>A Manual setup using the <code>dapDebugServer</code> executable looks like this:</p> <ul> <li> <p>Make sure you're using nvim-dap 0.6.0+</p> </li> <li> <p>Install <a href="https://github.com/microsoft/vscode-js-debug">vscode-js-debug</a>:</p> <ul> <li>Download <code>js-debug-dap-${version}.tar.gz</code> from their <a href="https://github.com/microsoft/vscode-js-debug/releases">releases</a> page. You need at least version 1.77.0 (it might be not available yet in newer versions)</li> <li>Extract it to some folder via <code>tar xvzf path/to/vscode-js-debug.tar.gz</code>.</li> </ul> </li> <li> <p>Add the adapter definition:</p> </li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="require("dap").adapters["pwa-node"] = { type = "server", host = "localhost", port = "${port}", executable = { command = "node", -- 💀 Make sure to update this path to point to your installation args = {"/path/to/js-debug/src/dapDebugServer.js", "${port}"}, } }"><pre><span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span>).<span class="pl-e">adapters</span>[<span class="pl-s"><span class="pl-pds">"</span>pwa-node<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>server<span class="pl-pds">"</span></span>, <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>localhost<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">"</span></span>, <span class="pl-smi">executable</span> <span class="pl-k">=</span> { <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>node<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> 💀 Make sure to update this path to point to your installation</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">"</span>/path/to/js-debug/src/dapDebugServer.js<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">"</span></span>}, } }</pre></div> <ul> <li>Add a configuration:</li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="require("dap").configurations.javascript = { { type = "pwa-node", request = "launch", name = "Launch file", program = "${file}", cwd = "${workspaceFolder}", }, }"><pre><span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span>).<span class="pl-e">configurations</span>.<span class="pl-e">javascript</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>pwa-node<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch file<span class="pl-pds">"</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, }, }</pre></div> <div class="markdown-heading"><h3 class="heading-element">node-debug2</h3><a id="user-content-node-debug2" class="anchor" aria-label="Permalink: node-debug2" href="#node-debug2"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li> <p>Install <a href="https://github.com/microsoft/vscode-node-debug2">node-debug2</a></p> <ul> <li><code>mkdir -p ~/dev/microsoft</code></li> <li><code>git clone https://github.com/microsoft/vscode-node-debug2.git ~/dev/microsoft/vscode-node-debug2</code></li> <li><code>cd ~/dev/microsoft/vscode-node-debug2</code></li> <li><code>npm install</code></li> <li><code>NODE_OPTIONS=--no-experimental-fetch npm run build</code></li> </ul> </li> <li> <p>Add the adapter and configuration:</p> </li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.adapters.node2 = { type = 'executable', command = 'node', args = {os.getenv('HOME') .. '/dev/microsoft/vscode-node-debug2/out/src/nodeDebug.js'}, } dap.configurations.javascript = { { name = 'Launch', type = 'node2', request = 'launch', program = '${file}', cwd = vim.fn.getcwd(), sourceMaps = true, protocol = 'inspector', console = 'integratedTerminal', }, { -- For this to work you need to make sure the node process is started with the `--inspect` flag. name = 'Attach to process', type = 'node2', request = 'attach', processId = require'dap.utils'.pick_process, }, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">node2</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>node<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-c1">os.getenv</span>(<span class="pl-s"><span class="pl-pds">'</span>HOME<span class="pl-pds">'</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/dev/microsoft/vscode-node-debug2/out/src/nodeDebug.js<span class="pl-pds">'</span></span>}, } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">javascript</span> <span class="pl-k">=</span> { { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Launch<span class="pl-pds">'</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>node2<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${file}<span class="pl-pds">'</span></span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>(), <span class="pl-smi">sourceMaps</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">protocol</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>inspector<span class="pl-pds">'</span></span>, <span class="pl-smi">console</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>integratedTerminal<span class="pl-pds">'</span></span>, }, { <span class="pl-c"><span class="pl-c">--</span> For this to work you need to make sure the node process is started with the `--inspect` flag.</span> <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Attach to process<span class="pl-pds">'</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>node2<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>attach<span class="pl-pds">'</span></span>, <span class="pl-smi">processId</span> <span class="pl-k">=</span> <span class="pl-c1">require</span><span class="pl-s"><span class="pl-pds">'</span>dap.utils<span class="pl-pds">'</span></span>.<span class="pl-e">pick_process</span>, }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Javascript-Deno</h2><a id="user-content-javascript-deno" class="anchor" aria-label="Permalink: Javascript-Deno" href="#javascript-deno"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading"><h3 class="heading-element">vscode-js-debug</h3><a id="user-content-vscode-js-debug-1" class="anchor" aria-label="Permalink: vscode-js-debug" href="#vscode-js-debug-1"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li> <p>Make sure you're using nvim-dap 0.6.0+</p> </li> <li> <p>Install <a href="https://github.com/microsoft/vscode-js-debug">vscode-js-debug</a>:</p> <ul> <li>Download <code>js-debug-dap-${version}.tar.gz</code> from their <a href="https://github.com/microsoft/vscode-js-debug/releases">releases</a> page. You need at least version 1.77.0 (it might be not available yet in newer versions)</li> <li>Extract it to some folder via <code>tar xvzf path/to/vscode-js-debug.tar.gz</code>.</li> </ul> </li> <li> <p>Add the adapter definition:</p> </li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="require("dap").adapters["pwa-node"] = { type = "server", host = "localhost", port = "${port}", executable = { command = "node", -- 💀 Make sure to update this path to point to your installation args = {"/path/to/js-debug/src/dapDebugServer.js", "${port}"}, } }"><pre><span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span>).<span class="pl-e">adapters</span>[<span class="pl-s"><span class="pl-pds">"</span>pwa-node<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>server<span class="pl-pds">"</span></span>, <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>localhost<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">"</span></span>, <span class="pl-smi">executable</span> <span class="pl-k">=</span> { <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>node<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> 💀 Make sure to update this path to point to your installation</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">"</span>/path/to/js-debug/src/dapDebugServer.js<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>${port}<span class="pl-pds">"</span></span>}, } }</pre></div> <ul> <li>Add a configuration:</li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.typescript = { { type = 'pwa-node', request = 'launch', name = "Launch file", runtimeExecutable = "deno", runtimeArgs = { "run", "--inspect-wait", "--allow-all" }, program = "${file}", cwd = "${workspaceFolder}", attachSimplePort = 9229, }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">typescript</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>pwa-node<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch file<span class="pl-pds">"</span></span>, <span class="pl-smi">runtimeExecutable</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>deno<span class="pl-pds">"</span></span>, <span class="pl-smi">runtimeArgs</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>run<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>--inspect-wait<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>--allow-all<span class="pl-pds">"</span></span> }, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, <span class="pl-smi">attachSimplePort</span> <span class="pl-k">=</span> <span class="pl-c1">9229</span>, }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Javascript Chrome</h2><a id="user-content-javascript-chrome" class="anchor" aria-label="Permalink: Javascript Chrome" href="#javascript-chrome"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li> <p>build vscode-chrome-debug</p> <ul> <li>git clone <a href="https://github.com/Microsoft/vscode-chrome-debug">https://github.com/Microsoft/vscode-chrome-debug</a> </li> <li>cd ./vscode-chrome-debug</li> <li>npm install</li> <li>npm run build</li> </ul> </li> <li> <p>add the adapter cfg:</p> </li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.chrome = { type = "executable", command = "node", args = {os.getenv("HOME") .. "/path/to/vscode-chrome-debug/out/src/chromeDebug.js"} -- TODO adjust } dap.configurations.javascriptreact = { -- change this to javascript if needed { type = "chrome", request = "attach", program = "${file}", cwd = vim.fn.getcwd(), sourceMaps = true, protocol = "inspector", port = 9222, webRoot = "${workspaceFolder}" } } dap.configurations.typescriptreact = { -- change to typescript if needed { type = "chrome", request = "attach", program = "${file}", cwd = vim.fn.getcwd(), sourceMaps = true, protocol = "inspector", port = 9222, webRoot = "${workspaceFolder}" } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">chrome</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>executable<span class="pl-pds">"</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>node<span class="pl-pds">"</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-c1">os.getenv</span>(<span class="pl-s"><span class="pl-pds">"</span>HOME<span class="pl-pds">"</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">"</span>/path/to/vscode-chrome-debug/out/src/chromeDebug.js<span class="pl-pds">"</span></span>} <span class="pl-c"><span class="pl-c">--</span> TODO adjust</span> } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">javascriptreact</span> <span class="pl-k">=</span> { <span class="pl-c"><span class="pl-c">--</span> change this to javascript if needed</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>chrome<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>attach<span class="pl-pds">"</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>(), <span class="pl-smi">sourceMaps</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">protocol</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>inspector<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-c1">9222</span>, <span class="pl-smi">webRoot</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span> } } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">typescriptreact</span> <span class="pl-k">=</span> { <span class="pl-c"><span class="pl-c">--</span> change to typescript if needed</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>chrome<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>attach<span class="pl-pds">"</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>, <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>(), <span class="pl-smi">sourceMaps</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">protocol</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>inspector<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-c1">9222</span>, <span class="pl-smi">webRoot</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span> } }</pre></div> <p>note: chrome has to be started with a remote debugging port <code>google-chrome-stable --remote-debugging-port=9222</code></p> <div class="markdown-heading"><h2 class="heading-element">Javascript Firefox</h2><a id="user-content-javascript-firefox" class="anchor" aria-label="Permalink: Javascript Firefox" href="#javascript-firefox"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul> <li>build vscode-firefox-debug <ul> <li>git clone <a href="https://github.com/firefox-devtools/vscode-firefox-debug.git">https://github.com/firefox-devtools/vscode-firefox-debug.git</a> </li> <li>cd vscode-firefox-debug</li> <li>npm install</li> <li>npm run build</li> </ul> </li> </ul> <p><code>adapter.bundle.js</code> depends on other files from the dist folder. If you want to change the output files' location, make sure you copy the whole dist folder - <strong>DO NOT</strong> try to copy adapter.bundle.js <strong>on its own</strong> to some other folder.</p> <ul> <li>add the adapter cfg:</li> </ul> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.adapters.firefox = { type = 'executable', command = 'node', args = {os.getenv('HOME') .. '/path/to/vscode-firefox-debug/dist/adapter.bundle.js'}, } dap.configurations.typescript = { { name = 'Debug with Firefox', type = 'firefox', request = 'launch', reAttach = true, url = 'http://localhost:3000', webRoot = '${workspaceFolder}', firefoxExecutable = '/usr/bin/firefox' } }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">firefox</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>node<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-c1">os.getenv</span>(<span class="pl-s"><span class="pl-pds">'</span>HOME<span class="pl-pds">'</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/path/to/vscode-firefox-debug/dist/adapter.bundle.js<span class="pl-pds">'</span></span>}, } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">typescript</span> <span class="pl-k">=</span> { { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Debug with Firefox<span class="pl-pds">'</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>firefox<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">reAttach</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">url</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>http://localhost:3000<span class="pl-pds">'</span></span>, <span class="pl-smi">webRoot</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}<span class="pl-pds">'</span></span>, <span class="pl-smi">firefoxExecutable</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>/usr/bin/firefox<span class="pl-pds">'</span></span> } }</pre></div> <div class="markdown-heading"><h2 class="heading-element">PHP</h2><a id="user-content-php" class="anchor" aria-label="Permalink: PHP" href="#php"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install <a href="https://github.com/xdebug/vscode-php-debug">vscode-php-debug</a>:</p> <ul> <li><code>git clone https://github.com/xdebug/vscode-php-debug.git</code></li> <li><code>cd vscode-php-debug</code></li> <li><code>npm install && npm run build</code></li> </ul> <p>If you have not configured Xdebug, read <strong>Installation</strong> at <a href="https://github.com/xdebug/vscode-php-debug#installation">vscode-php-debug</a>.</p> <p>Add the adapter configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.php = { type = 'executable', command = 'node', args = { '/path/to/vscode-php-debug/out/phpDebug.js' } } dap.configurations.php = { { type = 'php', request = 'launch', name = 'Listen for Xdebug', port = 9003 } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">php</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>node<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>/path/to/vscode-php-debug/out/phpDebug.js<span class="pl-pds">' </span></span>} } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">php</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>php<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Listen for Xdebug<span class="pl-pds">'</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-c1">9003</span> } }</pre></div> <p>Supported configuration options for PHP can be found under <em>Supported launch.json settings</em> at the <a href="https://github.com/xdebug/vscode-php-debug#supported-launchjson-settings">vscode-php-debug</a> repo.</p> <div class="markdown-heading"><h2 class="heading-element">Perl</h2><a id="user-content-perl" class="anchor" aria-label="Permalink: Perl" href="#perl"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading"><h3 class="heading-element">perl-debug-adapter</h3><a id="user-content-perl-debug-adapter" class="anchor" aria-label="Permalink: perl-debug-adapter" href="#perl-debug-adapter"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>First, install <a href="https://github.com/Nihilus118/perl-debug-adapter">perl-debug-adapter</a> via one of the following methods:</p> <ul> <li><a href="https://github.com/williamboman/mason.nvim">mason.nvim</a></li> <li><a href="https://aur.archlinux.org/packages/perl-debug-adapter" rel="nofollow">AUR</a></li> </ul> <p>Add the adapter configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require 'dap' dap.adapters.perl = { type = 'executable', -- Path to perl-debug-adapter - will be different based on the installation method -- mason.nvim command = vim.env.MASON .. '/bin/perl-debug-adapter', -- AUR (or if perl-debug-adapter is in PATH) -- command = 'perl-debug-adapter', args = {}, } dap.configurations.perl = { { type = 'perl', request = 'launch', name = 'Launch Perl', program = '${workspaceFolder}/${relativeFile}', } } -- this is optional but can be helpful when starting out dap.set_log_level 'TRACE'"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span> <span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span> <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">perl</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> Path to perl-debug-adapter - will be different based on the installation method</span> <span class="pl-c"><span class="pl-c">--</span> mason.nvim</span> <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">env</span>.<span class="pl-e">MASON</span> <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/bin/perl-debug-adapter<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> AUR (or if perl-debug-adapter is in PATH)</span> <span class="pl-c"><span class="pl-c">--</span> command = 'perl-debug-adapter',</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> {}, } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">perl</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>perl<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Launch Perl<span class="pl-pds">'</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}/${relativeFile}<span class="pl-pds">'</span></span>, } } <span class="pl-c"><span class="pl-c">--</span> this is optional but can be helpful when starting out</span> <span class="pl-smi">dap</span>.<span class="pl-c1">set_log_level</span> <span class="pl-s"><span class="pl-pds">'</span>TRACE<span class="pl-pds">'</span></span></pre></div> <div class="markdown-heading"><h3 class="heading-element">Perl::LanguageServer</h3><a id="user-content-perllanguageserver" class="anchor" aria-label="Permalink: Perl::LanguageServer" href="#perllanguageserver"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install Perl::LanguageServer from cpan, e.g. via <code>cpanm Perl::LanguageServer</code>.</p> <p>You have to run the lsp in the background via: <code>perl -MPerl::LanguageServer -e "Perl::LanguageServer::run" -- --port 27011</code>, where <code>27011</code> is an arbitrary port that has to be open.</p> <p>Add the adapter configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.perlsp = { type = 'server'; host = '127.0.0.1'; port = '27011'; } dap.configurations.perl = { { name = 'Launch Perl'; type = 'perlsp'; request = 'launch'; program = "${workspaceFolder}/${relativeFile}"; reloadModules = true; stopOnEntry = false; cwd = "${workspaceFolder}"; } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">perlsp</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>server<span class="pl-pds">'</span></span>; <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>; <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>27011<span class="pl-pds">'</span></span>; } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">perl</span> <span class="pl-k">=</span> { { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Launch Perl<span class="pl-pds">'</span></span>; <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>perlsp<span class="pl-pds">'</span></span>; <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>; <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}/${relativeFile}<span class="pl-pds">"</span></span>; <span class="pl-smi">reloadModules</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>; <span class="pl-smi">stopOnEntry</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>; <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>; } }</pre></div> <p>There is an issue with the hover() method because the "$", "@" and "%" signs are not handled properly per default. You can fix it by adding them to iskeyword:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="vim.opt.iskeyword:append({"$", "@-@", "%"})"><pre><span class="pl-smi">vim</span>.<span class="pl-e">opt</span>.<span class="pl-en">iskeyword</span>:<span class="pl-c1">append</span>({<span class="pl-s"><span class="pl-pds">"</span>$<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>@-@<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>%<span class="pl-pds">"</span></span>})</pre></div> <div class="markdown-heading"><h2 class="heading-element">Scala</h2><a id="user-content-scala" class="anchor" aria-label="Permalink: Scala" href="#scala"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Possible via <a href="https://github.com/scalameta/nvim-metals">nvim-metals</a></p> <div class="markdown-heading"><h2 class="heading-element">Kotlin</h2><a id="user-content-kotlin" class="anchor" aria-label="Permalink: Kotlin" href="#kotlin"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install <a href="https://github.com/fwcd/kotlin-debug-adapter">kotlin-debug-adaptor</a></p> <p>Add the following to config</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.kotlin = { type = "executable", command = "kotlin-debug-adapter", options = { auto_continue_if_many_stopped = false }, } dap.configurations.kotlin = { { type = "kotlin", request = "launch", name = "This file", -- may differ, when in doubt, whatever your project structure may be, -- it has to correspond to the class file located at `build/classes/` -- and of course you have to build before you debug mainClass = function() local root = vim.fs.find("src", { path = vim.uv.cwd(), upward = true, stop = vim.env.HOME })[1] or "" local fname = vim.api.nvim_buf_get_name(0) -- src/main/kotlin/websearch/Main.kt -> websearch.MainKt return fname:gsub(root, ""):gsub("main/kotlin/", ""):gsub(".kt", "Kt"):gsub("/", "."):sub(2, -1) end, projectRoot = "${workspaceFolder}", jsonLogFile = "", enableJsonLogging = false, }, { -- Use this for unit tests -- First, run -- ./gradlew --info cleanTest test --debug-jvm -- then attach the debugger to it type = "kotlin", request = "attach", name = "Attach to debugging session", port = 5005, args = {}, projectRoot = vim.fn.getcwd, hostName = "localhost", timeout = 2000, }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">kotlin</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>executable<span class="pl-pds">"</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>kotlin-debug-adapter<span class="pl-pds">"</span></span>, <span class="pl-smi">options</span> <span class="pl-k">=</span> { <span class="pl-smi">auto_continue_if_many_stopped</span> <span class="pl-k">=</span> <span class="pl-c1">false</span> }, } <span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">kotlin</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>kotlin<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>This file<span class="pl-pds">"</span></span>, <span class="pl-c"><span class="pl-c">--</span> may differ, when in doubt, whatever your project structure may be,</span> <span class="pl-c"><span class="pl-c">--</span> it has to correspond to the class file located at `build/classes/`</span> <span class="pl-c"><span class="pl-c">--</span> and of course you have to build before you debug</span> <span class="pl-en">mainClass</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">local</span> <span class="pl-smi">root</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fs</span>.<span class="pl-c1">find</span>(<span class="pl-s"><span class="pl-pds">"</span>src<span class="pl-pds">"</span></span>, { <span class="pl-smi">path</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">uv</span>.<span class="pl-c1">cwd</span>(), <span class="pl-smi">upward</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-smi">stop</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">env</span>.<span class="pl-e">HOME</span> })[<span class="pl-c1">1</span>] <span class="pl-k">or</span> <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span> <span class="pl-k">local</span> <span class="pl-smi">fname</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">api</span>.<span class="pl-c1">nvim_buf_get_name</span>(<span class="pl-c1">0</span>) <span class="pl-c"><span class="pl-c">--</span> src/main/kotlin/websearch/Main.kt -> websearch.MainKt</span> <span class="pl-k">return</span> <span class="pl-en">fname</span>:<span class="pl-c1">gsub</span>(<span class="pl-smi">root</span>, <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span>):<span class="pl-c1">gsub</span>(<span class="pl-s"><span class="pl-pds">"</span>main/kotlin/<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span>):<span class="pl-c1">gsub</span>(<span class="pl-s"><span class="pl-pds">"</span>.kt<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>Kt<span class="pl-pds">"</span></span>):<span class="pl-c1">gsub</span>(<span class="pl-s"><span class="pl-pds">"</span>/<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>.<span class="pl-pds">"</span></span>):<span class="pl-c1">sub</span>(<span class="pl-c1">2</span>, <span class="pl-k">-</span><span class="pl-c1">1</span>) <span class="pl-k">end</span>, <span class="pl-smi">projectRoot</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, <span class="pl-smi">jsonLogFile</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span><span class="pl-pds">"</span></span>, <span class="pl-smi">enableJsonLogging</span> <span class="pl-k">=</span> <span class="pl-c1">false</span>, }, { <span class="pl-c"><span class="pl-c">--</span> Use this for unit tests</span> <span class="pl-c"><span class="pl-c">--</span> First, run </span> <span class="pl-c"><span class="pl-c">--</span> ./gradlew --info cleanTest test --debug-jvm</span> <span class="pl-c"><span class="pl-c">--</span> then attach the debugger to it</span> <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>kotlin<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>attach<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Attach to debugging session<span class="pl-pds">"</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-c1">5005</span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {}, <span class="pl-smi">projectRoot</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-e">getcwd</span>, <span class="pl-smi">hostName</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>localhost<span class="pl-pds">"</span></span>, <span class="pl-smi">timeout</span> <span class="pl-k">=</span> <span class="pl-c1">2000</span>, }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Lua</h2><a id="user-content-lua" class="anchor" aria-label="Permalink: Lua" href="#lua"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading"><h3 class="heading-element">local-lua-debugger-vscode</h3><a id="user-content-local-lua-debugger-vscode" class="anchor" aria-label="Permalink: local-lua-debugger-vscode" href="#local-lua-debugger-vscode"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install <a href="https://github.com/tomblind/local-lua-debugger-vscode">local-lua-debugger-vscode</a>, either via:</p> <ul> <li>Your package manager</li> <li>From source: <ul> <li>git clone <a href="https://github.com/tomblind/local-lua-debugger-vscode">https://github.com/tomblind/local-lua-debugger-vscode</a> </li> <li>cd local-lua-debugger-vscode</li> <li>npm install</li> <li>npm run build</li> </ul> </li> </ul> <p>Configure the adapter:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require("dap") dap.adapters["local-lua"] = { type = "executable", command = "node", args = { "/absolute/path/to/local-lua-debugger-vscode/extension/debugAdapter.js" }, enrich_config = function(config, on_config) if not config["extensionPath"] then local c = vim.deepcopy(config) -- 💀 If this is missing or wrong you'll see -- "module 'lldebugger' not found" errors in the dap-repl when trying to launch a debug session c.extensionPath = "/absolute/path/to/local-lua-debugger-vscode/" on_config(c) else on_config(config) end end, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">"</span>dap<span class="pl-pds">"</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>[<span class="pl-s"><span class="pl-pds">"</span>local-lua<span class="pl-pds">"</span></span>] <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>executable<span class="pl-pds">"</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>node<span class="pl-pds">"</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>/absolute/path/to/local-lua-debugger-vscode/extension/debugAdapter.js<span class="pl-pds">"</span></span> }, <span class="pl-en">enrich_config</span> <span class="pl-k">=</span> <span class="pl-k">function</span>(<span class="pl-smi">config</span>, <span class="pl-smi">on_config</span>) <span class="pl-k">if</span> <span class="pl-k">not</span> <span class="pl-smi">config</span>[<span class="pl-s"><span class="pl-pds">"</span>extensionPath<span class="pl-pds">"</span></span>] <span class="pl-k">then</span> <span class="pl-k">local</span> <span class="pl-smi">c</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-c1">deepcopy</span>(<span class="pl-smi">config</span>) <span class="pl-c"><span class="pl-c">--</span> 💀 If this is missing or wrong you'll see </span> <span class="pl-c"><span class="pl-c">--</span> "module 'lldebugger' not found" errors in the dap-repl when trying to launch a debug session</span> <span class="pl-smi">c</span>.<span class="pl-e">extensionPath</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>/absolute/path/to/local-lua-debugger-vscode/<span class="pl-pds">"</span></span> <span class="pl-c1">on_config</span>(<span class="pl-smi">c</span>) <span class="pl-k">else</span> <span class="pl-c1">on_config</span>(<span class="pl-smi">config</span>) <span class="pl-k">end</span> <span class="pl-k">end</span>, }</pre></div> <p>If you install local-lua-debugger via a package manager, it may create a <code>local-lua-dbg</code> (or similar) executable, which you can use as <code>command</code> instead of invoking <code>node</code>.</p> <p>See <a href="https://zignar.net/2023/06/10/debugging-lua-in-neovim/" rel="nofollow">Debugging Lua in Neovim</a> for how to use this with Neovim itself as custom Lua interpreter.</p> <div class="markdown-heading"><h2 class="heading-element">Neovim Lua</h2><a id="user-content-neovim-lua" class="anchor" aria-label="Permalink: Neovim Lua" href="#neovim-lua"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Possible via <a href="https://github.com/jbyuki/one-small-step-for-vimkind">one-small-step-for-vimkind</a></p> <div class="markdown-heading"><h2 class="heading-element">OCaml earlybird</h2><a id="user-content-ocaml-earlybird" class="anchor" aria-label="Permalink: OCaml earlybird" href="#ocaml-earlybird"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ol> <li>Install <a href="https://github.com/hackwaly/ocamlearlybird/tree/master">earlybird</a> with <code>opam install earlybird</code> </li> <li>Change to <code>(lang dune 3.7)</code> or above and add <code>(map_workspace_root false)</code> to your <code>dune-project</code>. See <a href="https://dune.readthedocs.io/en/stable/dune-files.html#map-workspace-root" rel="nofollow">dune documentation</a> for more information.</li> <li>Build binary executable for debugging by adding <code>(modes byte exe)</code> to the dune stanza e.g. for tests</li> </ol> <div class="highlight highlight-source-dune notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="(tests (names test) (modes byte exe) (libraries alcotest))"><pre><span class="pl-e">(</span>tests <span class="pl-e">(</span>names test<span class="pl-e">)</span> (<span class="pl-k">modes</span> byte exe) (<span class="pl-k">libraries</span> alcotest)<span class="pl-e">)</span></pre></div> <p>Example adapter setup</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.ocamlearlybird = { type = 'executable', command = 'ocamlearlybird', args = { 'debug' } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">ocamlearlybird</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>ocamlearlybird<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">'</span>debug<span class="pl-pds">' </span></span>} }</pre></div> <p>Example configs</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.ocaml = { { name = 'OCaml Debug test.bc', type = 'ocamlearlybird', request = 'launch', program = '${workspaceFolder}/_build/default/test/test.bc', }, { name = 'OCaml Debug main.bc', type = 'ocamlearlybird', request = 'launch', program = '${workspaceFolder}/_build/default/bin/main.bc', }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">ocaml</span> <span class="pl-k">=</span> { { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>OCaml Debug test.bc<span class="pl-pds">'</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>ocamlearlybird<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}/_build/default/test/test.bc<span class="pl-pds">'</span></span>, }, { <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>OCaml Debug main.bc<span class="pl-pds">'</span></span>, <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>ocamlearlybird<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>, <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}/_build/default/bin/main.bc<span class="pl-pds">'</span></span>, }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Dotnet</h2><a id="user-content-dotnet" class="anchor" aria-label="Permalink: Dotnet" href="#dotnet"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install <a href="https://github.com/Samsung/netcoredbg">netcoredbg</a>, either via:</p> <ul> <li>Your package manager</li> <li>Downloading it from the release page and extracting it to a folder</li> <li>Building from source by following the instructions in the netcoredbg repo.</li> </ul> <p>Note: On macOS arm64, you must compile the binaries yourself</p> <p>Add the adapter configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" dap.adapters.coreclr = { type = 'executable', command = '/path/to/dotnet/netcoredbg/netcoredbg', args = {'--interpreter=vscode'} }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">coreclr</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>/path/to/dotnet/netcoredbg/netcoredbg<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">'</span>--interpreter=vscode<span class="pl-pds">'</span></span>} }</pre></div> <p>Add a configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.cs = { { type = "coreclr", name = "launch - netcoredbg", request = "launch", program = function() return vim.fn.input('Path to dll', vim.fn.getcwd() .. '/bin/Debug/', 'file') end, }, } "><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">cs</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>coreclr<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch - netcoredbg<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-en">program</span> <span class="pl-k">=</span> <span class="pl-k">function</span>() <span class="pl-k">return</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">input</span>(<span class="pl-s"><span class="pl-pds">'</span>Path to dll<span class="pl-pds">'</span></span>, <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">getcwd</span>() <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/bin/Debug/<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>file<span class="pl-pds">'</span></span>) <span class="pl-k">end</span>, }, } </pre></div> <p>Alternatively for macOS arm64, you can use this plugin: <a href="https://github.com/Cliffback/netcoredbg-macOS-arm64.nvim">netcoredbg-macOS-arm64.nvim</a></p> <p>For Windows, <code>set noshellslash</code> might be required in order for netcoredbg to find source references for breakpoints.</p> <div class="markdown-heading"><h2 class="heading-element">Unity</h2><a id="user-content-unity" class="anchor" aria-label="Permalink: Unity" href="#unity"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install <a href="https://github.com/Unity-Technologies/vscode-unity-debug">vscode-unity-debug</a></p> <p>Install <a href="https://github.com/mono/mono">mono</a> dependency if doesn't exist</p> <p>Add the adapter configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.unity = { type = 'executable', command = '<path-to-mono-directory>/Commands/mono', args = {'<path-to-unity-debug-directory>/unity.unity-debug-x.x.x/bin/UnityDebug.exe'} }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">unity</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span><path-to-mono-directory>/Commands/mono<span class="pl-pds">'</span></span>, <span class="pl-smi">args</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">'</span><path-to-unity-debug-directory>/unity.unity-debug-x.x.x/bin/UnityDebug.exe<span class="pl-pds">'</span></span>} }</pre></div> <p>Add a configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.cs = { { type = 'unity', request = 'attach', name = 'Unity Editor', } } "><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">cs</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>unity<span class="pl-pds">'</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>attach<span class="pl-pds">'</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>Unity Editor<span class="pl-pds">'</span></span>, } } </pre></div> <div class="markdown-heading"><h2 class="heading-element">Elixir</h2><a id="user-content-elixir" class="anchor" aria-label="Permalink: Elixir" href="#elixir"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Install <a href="https://github.com/elixir-lsp/elixir-ls#building-and-running">elixir-ls</a>.</p> <p>Add the adapter configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" dap.adapters.mix_task = { type = 'executable', command = '/path/to/elixir-ls/debug_adapter.sh', -- debug_adapter.bat for windows args = {} }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">mix_task</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>, <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>/path/to/elixir-ls/debug_adapter.sh<span class="pl-pds">'</span></span>, <span class="pl-c"><span class="pl-c">--</span> debug_adapter.bat for windows</span> <span class="pl-smi">args</span> <span class="pl-k">=</span> {} }</pre></div> <p>Add a configuration (<a href="https://github.com/elixir-lsp/elixir-ls#debugger-support">see configuration options</a>):</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.elixir = { { type = "mix_task", name = "mix test", task = 'test', taskArgs = {"--trace"}, request = "launch", startApps = true, -- for Phoenix projects projectDir = "${workspaceFolder}", requireFiles = { "test/**/test_helper.exs", "test/**/*_test.exs" } }, }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">elixir</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>mix_task<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>mix test<span class="pl-pds">"</span></span>, <span class="pl-smi">task</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>test<span class="pl-pds">'</span></span>, <span class="pl-smi">taskArgs</span> <span class="pl-k">=</span> {<span class="pl-s"><span class="pl-pds">"</span>--trace<span class="pl-pds">"</span></span>}, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">startApps</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>, <span class="pl-c"><span class="pl-c">--</span> for Phoenix projects</span> <span class="pl-smi">projectDir</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, <span class="pl-smi">requireFiles</span> <span class="pl-k">=</span> { <span class="pl-s"><span class="pl-pds">"</span>test/**/test_helper.exs<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>test/**/*_test.exs<span class="pl-pds">"</span></span> } }, }</pre></div> <div class="markdown-heading"><h2 class="heading-element">Godot GDScript</h2><a id="user-content-godot-gdscript" class="anchor" aria-label="Permalink: Godot GDScript" href="#godot-gdscript"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Godot 4.0 includes support for the debug adapter protocol.</p> <p>You need to have a Godot instance running to use it.</p> <p>Adapter definition:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="local dap = require('dap') dap.adapters.godot = { type = "server", host = '127.0.0.1', port = 6006, }"><pre><span class="pl-k">local</span> <span class="pl-smi">dap</span> <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>dap<span class="pl-pds">'</span></span>) <span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">godot</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>server<span class="pl-pds">"</span></span>, <span class="pl-smi">host</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>127.0.0.1<span class="pl-pds">'</span></span>, <span class="pl-smi">port</span> <span class="pl-k">=</span> <span class="pl-c1">6006</span>, }</pre></div> <p>The port must match the Godot setting. Go to <strong>Editor</strong> -> <strong>Editor Settings</strong>, then find <strong>Debug Adapter</strong> under <strong>Network</strong>:</p> <p><img src="https://user-images.githubusercontent.com/38700/186951662-8a9e340a-498a-48f9-931d-dae0bffe67bd.png" alt="image"></p> <p>The <strong>Debug with External Editor</strong> checkbox in the Script view must be checked. Go to <strong>Debug</strong> -> <strong>Debug with External Editor</strong></p> <p><img src="https://private-user-images.githubusercontent.com/12729238/333340336-7d19819b-ea4b-4426-a724-c26968caeeda.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzI5ODA5MDIsIm5iZiI6MTczMjk4MDYwMiwicGF0aCI6Ii8xMjcyOTIzOC8zMzMzNDAzMzYtN2QxOTgxOWItZWE0Yi00NDI2LWE3MjQtYzI2OTY4Y2FlZWRhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDExMzAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMTMwVDE1MzAwMlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY1MWExNTdkMjUxODJhOGRhYjMwMjc2NjdlYTRlNzA0MjA1MGVlNzRjNWJlNTZkYTRmNTc3MzA4MDliZDcyZDUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DHG9_EeFcroqm1W-6N-936NzvU9mswS2w1R07lJvVEE" alt="image" content-type-secured-asset="image/png"></p> <p>Configuration:</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.gdscript = { { type = "godot", request = "launch", name = "Launch scene", project = "${workspaceFolder}", } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">gdscript</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>godot<span class="pl-pds">"</span></span>, <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>launch<span class="pl-pds">"</span></span>, <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch scene<span class="pl-pds">"</span></span>, <span class="pl-smi">project</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${workspaceFolder}<span class="pl-pds">"</span></span>, } }</pre></div> <p>See the <code>Configuration</code> section in the <a href="https://github.com/godotengine/godot-vscode-plugin#gdscript-debugger">godot-vscode-plugin</a> README for a description of the configuration properties.</p> <div class="markdown-heading"><h1 class="heading-element">Bash</h1><a id="user-content-bash" class="anchor" aria-label="Permalink: Bash" href="#bash"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p>Make sure you have <a href="https://nodejs.org/en" rel="nofollow">nodejs</a> installed. Otherwise, starting the debugger will exit with <code>127</code>.</p> <p>Add the adapter configuration :</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.adapters.bashdb = { type = 'executable'; command = vim.fn.stdpath("data") .. '/mason/packages/bash-debug-adapter/bash-debug-adapter'; name = 'bashdb'; }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">adapters</span>.<span class="pl-e">bashdb</span> <span class="pl-k">=</span> { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>executable<span class="pl-pds">'</span></span>; <span class="pl-smi">command</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">stdpath</span>(<span class="pl-s"><span class="pl-pds">"</span>data<span class="pl-pds">"</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/mason/packages/bash-debug-adapter/bash-debug-adapter<span class="pl-pds">'</span></span>; <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>bashdb<span class="pl-pds">'</span></span>; }</pre></div> <p>Add the configuration :</p> <div class="highlight highlight-source-lua notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="dap.configurations.sh = { { type = 'bashdb'; request = 'launch'; name = "Launch file"; showDebugOutput = true; pathBashdb = vim.fn.stdpath("data") .. '/mason/packages/bash-debug-adapter/extension/bashdb_dir/bashdb'; pathBashdbLib = vim.fn.stdpath("data") .. '/mason/packages/bash-debug-adapter/extension/bashdb_dir'; trace = true; file = "${file}"; program = "${file}"; cwd = '${workspaceFolder}'; pathCat = "cat"; pathBash = "/bin/bash"; pathMkfifo = "mkfifo"; pathPkill = "pkill"; args = {}; env = {}; terminalKind = "integrated"; } }"><pre><span class="pl-smi">dap</span>.<span class="pl-e">configurations</span>.<span class="pl-e">sh</span> <span class="pl-k">=</span> { { <span class="pl-smi">type</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>bashdb<span class="pl-pds">'</span></span>; <span class="pl-smi">request</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>launch<span class="pl-pds">'</span></span>; <span class="pl-smi">name</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>Launch file<span class="pl-pds">"</span></span>; <span class="pl-smi">showDebugOutput</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>; <span class="pl-smi">pathBashdb</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">stdpath</span>(<span class="pl-s"><span class="pl-pds">"</span>data<span class="pl-pds">"</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/mason/packages/bash-debug-adapter/extension/bashdb_dir/bashdb<span class="pl-pds">'</span></span>; <span class="pl-smi">pathBashdbLib</span> <span class="pl-k">=</span> <span class="pl-smi">vim</span>.<span class="pl-e">fn</span>.<span class="pl-c1">stdpath</span>(<span class="pl-s"><span class="pl-pds">"</span>data<span class="pl-pds">"</span></span>) <span class="pl-k">..</span> <span class="pl-s"><span class="pl-pds">'</span>/mason/packages/bash-debug-adapter/extension/bashdb_dir<span class="pl-pds">'</span></span>; <span class="pl-smi">trace</span> <span class="pl-k">=</span> <span class="pl-c1">true</span>; <span class="pl-smi">file</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>; <span class="pl-smi">program</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>${file}<span class="pl-pds">"</span></span>; <span class="pl-smi">cwd</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">'</span>${workspaceFolder}<span class="pl-pds">'</span></span>; <span class="pl-smi">pathCat</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>cat<span class="pl-pds">"</span></span>; <span class="pl-smi">pathBash</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>/bin/bash<span class="pl-pds">"</span></span>; <span class="pl-smi">pathMkfifo</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>mkfifo<span class="pl-pds">"</span></span>; <span class="pl-smi">pathPkill</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>pkill<span class="pl-pds">"</span></span>; <span class="pl-smi">args</span> <span class="pl-k">=</span> {}; <span class="pl-smi">env</span> <span class="pl-k">=</span> {}; <span class="pl-smi">terminalKind</span> <span class="pl-k">=</span> <span class="pl-s"><span class="pl-pds">"</span>integrated<span class="pl-pds">"</span></span>; } }</pre></div> </div> <div id="wiki-footer" class="mt-5 Link--muted wiki-footer"> <a class="d-block p-3 Link--muted text-center border border-dashed rounded-2" href="/mfussenegger/nvim-dap/wiki/_new?wiki%5Bname%5D=_Footer"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus mr-1"> <path d="M7.75 2a.75.75 0 0 1 .75.75V7h4.25a.75.75 0 0 1 0 1.5H8.5v4.25a.75.75 0 0 1-1.5 0V8.5H2.75a.75.75 0 0 1 0-1.5H7V2.75A.75.75 0 0 1 7.75 2Z"></path> </svg> Add a custom footer </a> </div> </div> </div> <div style="min-width: 0" data-view-component="true" class="Layout-sidebar"> <div class="wiki-rightbar"> <nav id="wiki-pages-box" class="mb-4 wiki-pages-box js-wiki-pages-box" aria-labelledby="wiki-pages-box-heading"> <div class="Box Box--condensed color-shadow-small"> <div class="Box-header px-2 py-1 js-wiki-toggle-collapse" style="cursor: pointer"> <h3 class="Box-title d-flex flex-items-center" id="wiki-pages-box-heading"> <button id="icon-button-405d8b8b-4381-4485-9a73-06a2a9534d8d" aria-labelledby="tooltip-dd95b949-4b20-409b-8149-d80eba25fbe9" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--small js-wiki-sidebar-pages-toggle-chevron "> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down Button-visual"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </button><tool-tip id="tooltip-dd95b949-4b20-409b-8149-d80eba25fbe9" for="icon-button-405d8b8b-4381-4485-9a73-06a2a9534d8d" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Toggle table of contents</tool-tip> <span>Pages <span title="12" data-view-component="true" class="Counter Counter--primary">12</span></span> </h3> </div> <div class="d-none js-wiki-sidebar-toggle-display"> <div class="filter-bar"> <input type="text" id="wiki-pages-filter" class="form-control input-sm input-block js-filterable-field" placeholder="Find a page…" aria-label="Find a page…"> </div> <ul class="m-0 p-0 list-style-none" data-filterable-for="wiki-pages-filter" data-filterable-type="substring" data-pjax> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki" data-view-component="true" class="Truncate-text text-bold py-1">Home</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Home/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/C-C---Rust-(gdb-via--vscode-cpptools)" data-view-component="true" class="Truncate-text text-bold py-1">C C Rust (gdb via vscode cpptools)</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/C-C---Rust-(gdb-via--vscode-cpptools)/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/C-C---Rust-(via--codelldb)" data-view-component="true" class="Truncate-text text-bold py-1">C C Rust (via codelldb)</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/C-C---Rust-(via--codelldb)/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/C-CPP-Rust-(via-codelldb)" data-view-component="true" class="Truncate-text text-bold py-1">C CPP Rust (via codelldb)</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/C-CPP-Rust-(via-codelldb)/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Cookbook" data-view-component="true" class="Truncate-text text-bold py-1">Cookbook</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Cookbook/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" open> <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron js-wiki-sidebar-toc-toggle-chevron-open mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation" data-view-component="true" class="Truncate-text text-bold py-1">Debug Adapter installation</a> </span> </div> </summary> <ul class="list-style-none mx-4 px-1"> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#contents">Contents</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#ansible">Ansible</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#python">Python</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#brightscript">Brightscript</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#setup-steps">Setup steps</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#ccrust-via-gdb">C/C++/Rust (via gdb)</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#ccrust-via-vscode-cpptools">C/C++/Rust (via vscode-cpptools)</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#ccrust-via-codelldb">C/C++/Rust (via codelldb)</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#ccrust-via-lldb-vscode">C/C++/Rust (via lldb-vscode)</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#environment-variables">Environment variables</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#lldb-commands">LLDB commands</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#building-lldb-vscode">Building lldb-vscode</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#installation-with-homebrew">Installation with Homebrew</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#probe-rs">Probe-rs</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#mockdebug">Mockdebug</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#go">Go</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#go-using-delve-directly">Go (using delve directly)</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#ruby">Ruby</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#with-ruby-debug">with Ruby Debug</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#with-redapt">with redapt</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#dart">Dart</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#haskell">Haskell</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#javascript">Javascript</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#vscode-js-debug">vscode-js-debug</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#node-debug2">node-debug2</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#javascript-deno">Javascript-Deno</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#vscode-js-debug-1">vscode-js-debug</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#javascript-chrome">Javascript Chrome</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#javascript-firefox">Javascript Firefox</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#php">PHP</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#perl">Perl</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#perl-debug-adapter">perl-debug-adapter</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#perllanguageserver">Perl::LanguageServer</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#scala">Scala</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#kotlin">Kotlin</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#lua">Lua</a> </li> <li class="my-2" style="padding-left: 36px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#local-lua-debugger-vscode">local-lua-debugger-vscode</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#neovim-lua">Neovim Lua</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#ocaml-earlybird">OCaml earlybird</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#dotnet">Dotnet</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#unity">Unity</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#elixir">Elixir</a> </li> <li class="my-2" style="padding-left: 24px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#godot-gdscript">Godot GDScript</a> </li> <li class="my-2" style="padding-left: 12px;"> <a class="Link--primary" data-analytics-event="{"category":"Wiki","action":"toc_click","label":null}" href="/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation#bash">Bash</a> </li> </ul> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Debug-symbols-in-various-languages-and-build-systems" data-view-component="true" class="Truncate-text text-bold py-1">Debug symbols in various languages and build systems</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Debug-symbols-in-various-languages-and-build-systems/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Extensions" data-view-component="true" class="Truncate-text text-bold py-1">Extensions</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Extensions/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Fix-Javascript-Firefox-configuration-code-block" data-view-component="true" class="Truncate-text text-bold py-1">Fix Javascript Firefox configuration code block</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Fix-Javascript-Firefox-configuration-code-block/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Java" data-view-component="true" class="Truncate-text text-bold py-1">Java</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Java/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Local-and-Remote-Debugging-with-Docker" data-view-component="true" class="Truncate-text text-bold py-1">Local and Remote Debugging with Docker</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Local-and-Remote-Debugging-with-Docker/_toc"> </include-fragment> </details> </li> <li class="Box-row px-2 py-2"> <details class="details-reset" > <summary> <div class="d-flex flex-items-start"> <div class="p-2 mt-n1 mb-n1 ml-n1 btn btn-octicon js-wiki-sidebar-toc-toggle-chevron-button "> <span hidden="hidden" data-view-component="true"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" data-view-component="true" class="js-wiki-sidebar-toc-spinner mr-0 v-align-text-bottom anim-rotate"> <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" fill="none" /> <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> </svg> <span class="sr-only">Loading</span> </span> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down js-wiki-sidebar-toc-toggle-chevron mr-0"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </div> <span data-view-component="true" class="Truncate"> <a href="/mfussenegger/nvim-dap/wiki/Troubleshooting" data-view-component="true" class="Truncate-text text-bold py-1">Troubleshooting</a> </span> </div> </summary> <include-fragment class="js-wiki-sidebar-toc-fragment" loading="lazy" src="https://github.com/mfussenegger/nvim-dap/wiki/Troubleshooting/_toc"> </include-fragment> </details> </li> </ul> </div> </div> </nav> <div class="gollum-markdown-content"> <div class="Box Box--condensed mb-4"> <div class="Box-body wiki-custom-sidebar markdown-body wiki-writable"> <a href="/mfussenegger/nvim-dap/wiki/_Sidebar/_edit" class="position-relative float-right ml-3 Link--muted" title="Edit sidebar" style="z-index: 10" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </a> <ul> <li> <a href="https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation">Debug Adapter Installation</a> <ul> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/C-C---Rust-(gdb-via--vscode-cpptools)">C/C++/Rust (cpptools)</a></li> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/C-C---Rust-(via--codelldb)">C/C++/Rust (codelldb)</a></li> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/Java">Java</a></li> </ul> </li> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/Extensions">Extensions</a></li> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/Cookbook">Cookbook</a></li> <li><a href="https://github.com/mfussenegger/nvim-dap/wiki/Local-and-Remote-Debugging-with-Docker">Local and Remote Debugging with Docker</a></li> </ul> </div> </div> </div> <h5 class="mt-0 mb-2">Clone this wiki locally</h5> <div class="width-full input-group"> <input id="wiki-clone-url" type="text" data-autoselect class="form-control input-sm text-small color-fg-muted input-monospace" aria-label="Clone URL for this wiki" value="https://github.com/mfussenegger/nvim-dap.wiki.git" readonly> <span class="input-group-button"> <span data-view-component="true"> <clipboard-copy for="wiki-clone-url" aria-label="Copy to clipboard" type="button" data-view-component="true" class="rounded-left-0 border-left-0 Button--secondary Button--small Button"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg style="display: none;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> <div aria-live="polite" aria-atomic="true" class="sr-only" data-clipboard-copy-feedback></div> </span> </span> </div> </div> </div> </div> </div> </div> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <span> © 2024 GitHub, Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to Terms","label":"text:terms"}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to privacy","label":"text:privacy"}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to security","label":"text:security"}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to status","label":"text:status"}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to docs","label":"text:docs"}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to contact","label":"text:contact"}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"cookies","context":"subfooter","tag":"link","label":"cookies_link_subfooter_footer"}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"dont_share_info","context":"subfooter","tag":"link","label":"dont_share_info_link_subfooter_footer"}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>