From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Sebastian Wiesner Newsgroups: gmane.emacs.devel Subject: Re: maintain flymake.el Date: Mon, 16 Dec 2013 17:48:12 +0100 Message-ID: References: <87a9gdzx63.fsf@flea.lifelogs.com> <8738lsq32g.fsf@flea.lifelogs.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1387212499 11801 80.91.229.3 (16 Dec 2013 16:48:19 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 16 Dec 2013 16:48:19 +0000 (UTC) Cc: emacs-devel To: =?UTF-8?Q?Jan_Dj=C3=A4rv?= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Dec 16 17:48:27 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VsbLE-00057H-EJ for ged-emacs-devel@m.gmane.org; Mon, 16 Dec 2013 17:48:24 +0100 Original-Received: from localhost ([::1]:57045 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsbLD-0008SH-Q6 for ged-emacs-devel@m.gmane.org; Mon, 16 Dec 2013 11:48:23 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:39025) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsbL5-0008LS-Sq for emacs-devel@gnu.org; Mon, 16 Dec 2013 11:48:20 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VsbL3-0006EM-SW for emacs-devel@gnu.org; Mon, 16 Dec 2013 11:48:15 -0500 Original-Received: from mail-qe0-x230.google.com ([2607:f8b0:400d:c02::230]:43483) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VsbL3-0006Do-Ov for emacs-devel@gnu.org; Mon, 16 Dec 2013 11:48:13 -0500 Original-Received: by mail-qe0-f48.google.com with SMTP id gc15so4029086qeb.21 for ; Mon, 16 Dec 2013 08:48:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=T8HdtfjshM3m3D8m2SgsDfAnGoAJ+jRI90PYU+BIR/M=; b=x8yKD6TRBCOyMmS7xJDgJ1AcQ6px7UfjqIK8iFFUrgjNgzJh3PUb+NkiLrYZNU6DKg 1a/mC8OB63kciO25Ozcu4+jHGUbWOexbv5CcWcd/BMWTBVRxytxrc2d4Gf++R3KLC5Y+ 1oCfQdZuzGE0fqZSvymiUoApxbItTZTzgXgha187wT6SOHoCeQxy4KKNYsnSekioiHSH bgYTSw1K0VFJ3K78OmOch8NWWT3ZWuWIcLuqs7OIcqZ7+YWa2A4Myq/mjfRbmwNcGhk6 123zMwDSYdIdE9wAozmOXRgNvROKg++k72GegLQqjiIu+hW/FQJ+mVf9Si3NOCkV/EKL Ob9A== X-Received: by 10.224.88.134 with SMTP id a6mr34696196qam.73.1387212492800; Mon, 16 Dec 2013 08:48:12 -0800 (PST) Original-Received: by 10.224.207.73 with HTTP; Mon, 16 Dec 2013 08:48:12 -0800 (PST) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c02::230 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:166486 Archived-At: 2013/12/16 Jan Dj=C3=A4rv : > Hello. > > 16 dec 2013 kl. 15:32 skrev Ted Zlatanov : > >> On Sun, 15 Dec 2013 19:31:46 +0100 Sebastian Wiesner wrote: >> >> SW> 2013/12/14 Sebastian Wiesner : >>>> I hope to finish the document by tomorrow evening, and will come back >>>> if it's done. >> >> SW> I have completed the document now. The final version is to be found >> SW> at https://github.com/flycheck/flycheck/wiki/Flycheck-versus-Flymake= . >> SW> It's a thorough write-up of the differences and similarities between >> SW> Flycheck and Flymake, and probably also a comprehensive summary of t= he >> SW> current issues and weaknesses in Flymake. >> >> SW> Again, it's probably unfairly biased towards Flycheck. I tried my >> SW> best to be neutral, but I consider Flycheck superior and think that >> SW> the design and implementation of Flymake are somewhat broken, so I m= ay >> SW> have failed to properly account for Flymake's features and strengths= . >> SW> Please excuse this, and feel free to correct any mistakes I may have >> SW> made. >> >> SW> Please also suggest improvements, such as additional aspects which >> SW> should be covered, or report issues, such as missing details in the >> SW> comparsion. > > > You are missing the big think that separates flymake and flycheck. Flymak= e uses makefiles, flycheck does not. This means to be able to use flycheck= on a large C/C++ project you have to maintain includes and defined in both= makefiles and as lisp variables for flycheck. Flymake does not have that = problem, you just add one rule for it in the makefiles, re-using all defini= tions and include paths. > > This is really a showstopper for flycheck, even if it has some nicer GUI = stuff. It is really only usable for small projects. You can easily define your own syntax checker: (flycheck-define-checker 'c-makefile-checker :command ("make" "CC=3Dclang" "build") :error-patterns ((info line-start (file-name) ":" line ":" column ": note: " (message) line-end) (warning line-start (file-name) ":" line ":" column ": warning: " (message) line-end) (error line-start (file-name) ":" line ":" column ": " (or "fatal error" "error") ": " (message) line-end)) :modes (c-mode) :predicate (lambda () (not (buffer-modified-p))) The error patterns are for Clang. Adapt the accordingly, if you are using a different compiler. The predicate makes sure that Flycheck only uses this syntax checker after the buffer was saved, because calling out to the build system after every change is probably not a good idea. Then just register the new syntax checker, and disable the built-in Clang checker to avoid conflicting error messages: (add-to-list 'flycheck-checkers 'c-make-file-checker) (setq-default flycheck-disabled-checkers '(c/c++-clang)) Feel free to copy this to your "init.el". Flycheck does not include this syntax checker for two reasons: - No one contributed it :) - It's hard, if not impossible, to get this right in a generic way. There is simply no standard for Makefiles and compiler messages, so Flycheck has no chance to call a Makefile in a portable way, that works identically across all build systems, from CMake and Autotools, to custom ad-hoc Makefiles, which don't even use generic rules, to the strangest and most exotic compiler flags, especially if it does not want to conduct a full build (which could take minutes, if not ours), but only a syntax check of the file being edited. But again, you know your projects, and nothing stops you from definining your own syntax checker just for these projects. Try it. Really. It's easy.