From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: John Yates Newsgroups: gmane.emacs.help Subject: Re: Navigating an enormous code base Date: Tue, 26 Apr 2022 08:53:48 -0400 Message-ID: References: <83bkwom7i1.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22364"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Help Gnu Emacs mailing list To: Eli Zaretskii Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Tue Apr 26 15:03:48 2022 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1njKr5-0005dv-Sw for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 26 Apr 2022 15:03:47 +0200 Original-Received: from localhost ([::1]:55000 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1njKr4-0006F3-OJ for geh-help-gnu-emacs@m.gmane-mx.org; Tue, 26 Apr 2022 09:03:46 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46322) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1njKhf-0004ZS-CM for help-gnu-emacs@gnu.org; Tue, 26 Apr 2022 08:54:03 -0400 Original-Received: from mail-oa1-f42.google.com ([209.85.160.42]:45570) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1njKhd-0000Zh-IG; Tue, 26 Apr 2022 08:54:02 -0400 Original-Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-e93bbb54f9so6539601fac.12; Tue, 26 Apr 2022 05:54:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=NHiAVr0vGGR0wd446Lq3RxMuyb7el5XU9PL+q2b2NKo=; b=LEvgXmE4eHz2g5idCbTRnMlsMtMRTNImNVyxmMjYYY1YNcg+kupANYQLUP7QOz+ebj WsJGTdXPAunCGGr3Veb42JOqD2kv55WPaeYieTRlOzKVS1rIF+4qRqtHC1PzlvNrGLlH r5YrmpCe2/QK4rTD4JGndgriTAuvdq/SAaxeaZ1v1pCSsySHHiKEmZlVqehceCVW1JAb 3ZPMhTq2BOXpSYVrmgd3JIS1gvkeRhgQY6Lnux1CebHysD6R9Mgx1IQq+udc4gR7eYFW Ld1YB0kxsQpn6hTBmik4Vxdo8gHgJZPI6CuD0g+01HdmFx4TUgqzbl3Sm8+2z2LSWlUg D2DQ== X-Gm-Message-State: AOAM530vDccZLABwL8RotlG4BRUXEIAo11CBKPuchfvr0PHaMj5HbfYj eiITOGCTmeR7cUq4MrCJ9ekl1dyS1rEhclAFoupLD/icz0Y= X-Google-Smtp-Source: ABdhPJwwANmPoEJpMHjkMuaxVUDVlKg98qH1YF2t/o2iKI7lWzbqu7sqBTECaIBVBuqZviMXzdLY+56TA1BBI/o1JSE= X-Received: by 2002:a05:6871:89e:b0:e9:5368:10ed with SMTP id r30-20020a056871089e00b000e9536810edmr2737068oaq.182.1650977639778; Tue, 26 Apr 2022 05:53:59 -0700 (PDT) In-Reply-To: <83bkwom7i1.fsf@gnu.org> Received-SPF: pass client-ip=209.85.160.42; envelope-from=john.yates.sheets@gmail.com; helo=mail-oa1-f42.google.com X-Spam_score_int: -13 X-Spam_score: -1.4 X-Spam_bar: - X-Spam_report: (-1.4 / 5.0 requ) BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:137034 Archived-At: On Tue, Apr 26, 2022 at 7:03 AM Eli Zaretskii wrote: > > In what language(s) is this written? Primarily C++. But there are Makefiles, bash scripts, ad hoc text files, xml, json, etc. > Can you tell more about what you mean by "how I find files"? Like > show an example or two of use cases where you need to 'find files"? Within the current project I want to open a specific suite_registraction.cpp in one of multiple unittest/ or pkgtest/ directories. In some project, could be the current project, could be a sibling project, I want to open a specific file. My goal is not so much navigating by symbols (I have lsp for that). Rather it is more of a UI question. I want to use a modern completion interface to open files by name. Supporting completion requires that the space of possible file names be indexed and supplied to the completion function. As mentioned in my first post, an issue is how should the completion UI present files with duplicate names. Another issue is what should be the scope of file name (paths) fed to the completion UI. Here I can imagine the following possibilities: * The current project * An explicitly specified sibling project * Within the current workspace, all projects in which I have made changes (perhap via after-save-hook) * One of various pre-specified canned sets of projects I could imagine splitting this UI into: * Find in current project * Find within a menu of wider contexts > And what built-in tools did you try to solve those problems? I have not tried any built-in tools yet. I do have a private wsf.el (WorkSpace Files) package that indexes as much of a workspace as I am ever likely visit: https://github.com/jsyjr/wsf/blob/main/wsf.el It is single threaded and rather slow (10 minutes to index a workspace on a local SSD). Currently I use ivy to browse the index and open files. Loading and caching the index in memory takes 5 or 10 seconds. (There can only be one workspace active at any time.) Once loaded, ivy interactivity is not great. I am now using the whole vertico / marginalia / corfu / etc stuff and want to ditch using ivy with my wsf. Ideally I would like to ditch wsf as well. Hence this posting.