emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: IDE


From: Eric Ludlam
Subject: Re: IDE
Date: Tue, 13 Oct 2015 22:45:30 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0

On 10/12/2015 05:54 PM, Przemysław Wojnowski wrote:
IMHO defining relations between project elements should be delegated
to each type of project. For example Java Project knows where are
sources/tests/resources and can setup that using Project API.

Moreover in one project (lets call it Meta Project) there
should be a way to configure a set of language specific
subprojects, each one having its own backend(s) setup
(for code completion, docs, etc.).
A backend would be chosen by a mode in the current buffer (region?).

For example in a common "Java" webapp, the Meta Project setup could be:
{ languages:
   { java: {backend: classpath-indexer, build-tool: gradle,
other-options: ...}
     javascript: {backend: tags-backend, build-tool: npm, ...}
     groovy: ...} }

Support for build tools seems more straightforward, someone should
just collect an overview of how users interact with different ones,
like Make, Maven, Gradle, Rake, etc, to firmly establish the common
ground.
IMHO better approach would be to provide an API that could be
used by build tool specific plugins to add build tasks
(in a Command Pattern manner). Such registered commands could be
presented to a user in some uniform form. For example:
In Maven plugin:
(build-api-add-command
   {name: "compile", command: function-ref})

When user selects a command the unified build tools runner does:
(defun build-api-run (command)
   (apply command.function-ref))

Of course, there can be more than one build tool in a project,
so, if windows/menus were presented, the user would see for each of them
or maybe depending on current buffer's mode.
But the point is to provide an API not an implementation.

This is how EDE (a part of CEDET) is setup and works. There are "projects", and in projects there are "targets". There are project build commands, and target build commands. Each project or target can have language specific features for setting up CEDET's parsers.

There is a set of different base classes for projects, and many specializations for various flavors of java projects such as maven and ant, C++ projects, lisp projects, and more.

Many folks besides myself have built support for different kinds of projects, so extending to new types isn't too hard.

Eric



reply via email to

[Prev in Thread] Current Thread [Next in Thread]