* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. [not found] ` <20191030121651.BFCF8204DF@vcs0.savannah.gnu.org> @ 2019-10-30 14:59 ` Dmitry Gutov 2019-10-30 15:03 ` Lars Ingebrigtsen 0 siblings, 1 reply; 25+ messages in thread From: Dmitry Gutov @ 2019-10-30 14:59 UTC (permalink / raw) To: emacs-devel, Lars Ingebrigtsen A bit of a problem with this change is the syntax-ppss doscstring originally said (and still contains these words): except that values at positions 2 and 6 in the returned list (counting from 0) cannot be relied upon. So documenting them in this function is... not logical? On 30.10.2019 14:16, Lars Ingebrigtsen wrote: > branch: master > commit 305dbc7e2be05748039aacb1a3d697f6f64bed4c > Author: Lars Ingebrigtsen <larsi@gnus.org> > Commit: Lars Ingebrigtsen <larsi@gnus.org> > > Move description of value to syntax-ppss function. > > * lisp/emacs-lisp/syntax.el (syntax-ppss): Move the description of > the return value from... > > * src/syntax.c (Fparse_partial_sexp): ... here because > `syntax-ppss' is what's called over the place, and jumping through > an indirection to get to the value description is inconvenient. > --- > lisp/emacs-lisp/syntax.el | 20 ++++++++++++++++++++ > src/syntax.c | 20 +------------------- > 2 files changed, 21 insertions(+), 19 deletions(-) > > diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el > index 3861b16..913e34d 100644 > --- a/lisp/emacs-lisp/syntax.el > +++ b/lisp/emacs-lisp/syntax.el > @@ -476,6 +476,26 @@ run from `point-min' to POS except that values at positions 2 and 6 > in the returned list (counting from 0) cannot be relied upon. > Point is at POS when this function returns. > > +Value is a list of elements describing final state of parsing: > + 0. depth in parens. > + 1. character address of start of innermost containing list; nil if none. > + 2. character address of start of last complete sexp terminated. > + 3. non-nil if inside a string. > + (it is the character that will terminate the string, > + or t if the string should be terminated by a generic string delimiter.) > + 4. nil if outside a comment, t if inside a non-nestable comment, > + else an integer (the current comment nesting). > + 5. t if following a quote character. > + 6. the minimum paren-depth encountered during this scan. > + 7. style of comment, if any. > + 8. character address of start of comment or string; nil if not in one. > + 9. List of positions of currently open parens, outermost first. > +10. When the last position scanned holds the first character of a > + (potential) two character construct, the syntax of that position, > + otherwise nil. That construct can be a two character comment > + delimiter or an Escaped or Char-quoted character. > +11..... Possible further internal information used by ‘parse-partial-sexp’. > + > It is necessary to call `syntax-ppss-flush-cache' explicitly if > this function is called while `before-change-functions' is > temporarily let-bound, or if the buffer is modified without > diff --git a/src/syntax.c b/src/syntax.c > index edfdae2..8509213 100644 > --- a/src/syntax.c > +++ b/src/syntax.c > @@ -3530,25 +3530,7 @@ Parsing stops at TO or when certain criteria are met; > If fifth arg OLDSTATE is omitted or nil, > parsing assumes that FROM is the beginning of a function. > > -Value is a list of elements describing final state of parsing: > - 0. depth in parens. > - 1. character address of start of innermost containing list; nil if none. > - 2. character address of start of last complete sexp terminated. > - 3. non-nil if inside a string. > - (it is the character that will terminate the string, > - or t if the string should be terminated by a generic string delimiter.) > - 4. nil if outside a comment, t if inside a non-nestable comment, > - else an integer (the current comment nesting). > - 5. t if following a quote character. > - 6. the minimum paren-depth encountered during this scan. > - 7. style of comment, if any. > - 8. character address of start of comment or string; nil if not in one. > - 9. List of positions of currently open parens, outermost first. > -10. When the last position scanned holds the first character of a > - (potential) two character construct, the syntax of that position, > - otherwise nil. That construct can be a two character comment > - delimiter or an Escaped or Char-quoted character. > -11..... Possible further internal information used by `parse-partial-sexp'. > +See `syntax-ppss' for a description of the return value. > > If third arg TARGETDEPTH is non-nil, parsing stops if the depth > in parentheses becomes equal to TARGETDEPTH. > ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 14:59 ` master 305dbc7 2/4: Move description of value to syntax-ppss function Dmitry Gutov @ 2019-10-30 15:03 ` Lars Ingebrigtsen 2019-10-30 15:13 ` Dmitry Gutov 0 siblings, 1 reply; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-30 15:03 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov <dgutov@yandex.ru> writes: > A bit of a problem with this change is the syntax-ppss doscstring > originally said (and still contains these words): > > except that values at positions 2 and 6 > in the returned list (counting from 0) cannot be relied upon. > > So documenting them in this function is... not logical? It's slightly illogical, but it's documented that they "can't be relied upon", whatever that means. And splitting up the documentation over the two functions seemed even worse. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:03 ` Lars Ingebrigtsen @ 2019-10-30 15:13 ` Dmitry Gutov 2019-10-30 15:22 ` Lars Ingebrigtsen 0 siblings, 1 reply; 25+ messages in thread From: Dmitry Gutov @ 2019-10-30 15:13 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel On 30.10.2019 17:03, Lars Ingebrigtsen wrote: > It's slightly illogical, but it's documented that they "can't be relied > upon", whatever that means. Point is, in parse-partial-sexp the *can* be relied upon. Though I'm not sure how often they are used. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:13 ` Dmitry Gutov @ 2019-10-30 15:22 ` Lars Ingebrigtsen 2019-10-30 15:26 ` Dmitry Gutov ` (2 more replies) 0 siblings, 3 replies; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-30 15:22 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov <dgutov@yandex.ru> writes: > Point is, in parse-partial-sexp the *can* be relied upon. Though I'm > not sure how often they are used. Yes, the doc string certainly implies that they can be relied upon if you use that function instead. On the other hand, perhaps I shouldn't have moved it -- parse-partial-sexp is used a lot, too. I was only seeing syntax-ppss everywhere, but I see that it's used less than 2x as much. So perhaps that patch should be reverted anyway. Or have the list in both functions. Or, even better, stop saying (if (nth 5 state) (do-something-incomprehensible) (do-something-else-incomprehensible)) everywhere and just add accessor functions already, so that the code becomes marginally more readable. Because trying to make sense of it now is just too hard, and it doesn't have to be. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:22 ` Lars Ingebrigtsen @ 2019-10-30 15:26 ` Dmitry Gutov 2019-10-30 15:30 ` Lars Ingebrigtsen 2019-10-30 15:29 ` Lars Ingebrigtsen 2019-10-30 20:47 ` Alan Mackenzie 2 siblings, 1 reply; 25+ messages in thread From: Dmitry Gutov @ 2019-10-30 15:26 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel On 30.10.2019 17:22, Lars Ingebrigtsen wrote: > Yes, the doc string certainly implies that they can be relied upon if > you use that function instead. > > On the other hand, perhaps I shouldn't have moved it -- > parse-partial-sexp is used a lot, too. I was only seeing syntax-ppss > everywhere, but I see that it's used less than 2x as much. syntax-ppss is indeed the function that most consumers should call, but it's low-level enough that I never considered that to be a problem. > So perhaps that patch should be reverted anyway. That's what I would do. > Or have the list in > both functions. Or, even better, stop saying > > (if (nth 5 state) > (do-something-incomprehensible) > (do-something-else-incomprehensible)) > > everywhere and just add accessor functions already, so that the code > becomes marginally more readable. Because trying to make sense of it > now is just too hard, and it doesn't have to be. Someone should probably try to add that accessor thing, but also perf-test the result. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:26 ` Dmitry Gutov @ 2019-10-30 15:30 ` Lars Ingebrigtsen 0 siblings, 0 replies; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-30 15:30 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov <dgutov@yandex.ru> writes: > Someone should probably try to add that accessor thing, but also > perf-test the result. The accessors would be macros, so the performance impact should be nil. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:22 ` Lars Ingebrigtsen 2019-10-30 15:26 ` Dmitry Gutov @ 2019-10-30 15:29 ` Lars Ingebrigtsen 2019-10-30 16:13 ` Dmitry Gutov ` (2 more replies) 2019-10-30 20:47 ` Alan Mackenzie 2 siblings, 3 replies; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-30 15:29 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Lars Ingebrigtsen <larsi@gnus.org> writes: > So perhaps that patch should be reverted anyway. Or have the list in > both functions. Or, even better, stop saying > > (if (nth 5 state) > (do-something-incomprehensible) > (do-something-else-incomprehensible)) > > everywhere and just add accessor functions already, so that the code > becomes marginally more readable. Because trying to make sense of it > now is just too hard, and it doesn't have to be. If we want to do this, I volunteer to start doing the rewrite -- I have some functions for this from the decoded time makeover... So what would the accessor macros be? Err... looking at the doc string, something like: ppss-depth ppss-start-innermost ppss-start-last-complete-sexp ppss-string-terminator ppss-comment-nesting ppss-after-quote-character ppss-minimum-paren-depth ppss-comment-style ppss-start-comment-or-string ppss-open-paren-positions ppss-two-character-syntax ppss-internal -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:29 ` Lars Ingebrigtsen @ 2019-10-30 16:13 ` Dmitry Gutov 2019-10-30 16:17 ` Lars Ingebrigtsen 2019-10-30 19:39 ` Stefan Monnier 2019-10-30 20:34 ` Alan Mackenzie 2 siblings, 1 reply; 25+ messages in thread From: Dmitry Gutov @ 2019-10-30 16:13 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel On 30.10.2019 17:29, Lars Ingebrigtsen wrote: > If we want to do this, I volunteer to start doing the rewrite -- I have > some functions for this from the decoded time makeover... > > So what would the accessor macros be? Err... looking at the doc > string, something like: > > ppss-depth > ppss-start-innermost > ppss-start-last-complete-sexp > ppss-string-terminator > ppss-comment-nesting > ppss-after-quote-character > ppss-minimum-paren-depth > ppss-comment-style > ppss-start-comment-or-string > ppss-open-paren-positions > ppss-two-character-syntax > ppss-internal FWIW, we already have some accessors added, though they don't cover all of the fields (and none of these are macros): syntax-ppss-depth syntax-ppss-toplevel-pos syntax-ppss-context ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 16:13 ` Dmitry Gutov @ 2019-10-30 16:17 ` Lars Ingebrigtsen 2019-10-30 16:47 ` Dmitry Gutov 0 siblings, 1 reply; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-30 16:17 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov <dgutov@yandex.ru> writes: > FWIW, we already have some accessors added, though they don't cover > all of the fields (and none of these are macros): > > syntax-ppss-depth > syntax-ppss-toplevel-pos > syntax-ppss-context Only the first of these is an accessor -- the other two look like utility functions. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 16:17 ` Lars Ingebrigtsen @ 2019-10-30 16:47 ` Dmitry Gutov 2019-10-30 17:03 ` Lars Ingebrigtsen 0 siblings, 1 reply; 25+ messages in thread From: Dmitry Gutov @ 2019-10-30 16:47 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel On 30.10.2019 18:17, Lars Ingebrigtsen wrote: > Only the first of these is an accessor -- the other two look like > utility functions. OK, you are right. Regarding the names, some suggestions: ppss-after-quote-character -> -after-quote-p ppss-start-comment-or-string -> -comment-or-string-start ppss-internal -> nix ppss-start-last-complete-sexp and ppss-minimum-paren-depth can probably be nixed as well since "they can't be relied on". And prepend the names with syntax-, I think. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 16:47 ` Dmitry Gutov @ 2019-10-30 17:03 ` Lars Ingebrigtsen 0 siblings, 0 replies; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-30 17:03 UTC (permalink / raw) To: Dmitry Gutov; +Cc: emacs-devel Dmitry Gutov <dgutov@yandex.ru> writes: > Regarding the names, some suggestions: > > ppss-after-quote-character -> -after-quote-p > ppss-start-comment-or-string -> -comment-or-string-start > ppss-internal -> nix Makes sense. > ppss-start-last-complete-sexp and ppss-minimum-paren-depth can > probably be nixed as well since "they can't be relied on". But they can be relied on when returned from parse-partial-sexp. > And prepend the names with syntax-, I think. That makes them very long, which is awkward... Perhaps just syntax-* instead of syntax-ppss-* or ppss-*? -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:29 ` Lars Ingebrigtsen 2019-10-30 16:13 ` Dmitry Gutov @ 2019-10-30 19:39 ` Stefan Monnier 2019-10-30 20:28 ` Lars Ingebrigtsen 2019-10-30 20:34 ` Alan Mackenzie 2 siblings, 1 reply; 25+ messages in thread From: Stefan Monnier @ 2019-10-30 19:39 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel, Dmitry Gutov > ppss-depth > ppss-start-innermost > ppss-start-last-complete-sexp > ppss-string-terminator > ppss-comment-nesting > ppss-after-quote-character > ppss-minimum-paren-depth > ppss-comment-style > ppss-start-comment-or-string > ppss-open-paren-positions > ppss-two-character-syntax > ppss-internal Yes, please start with (cl-defstruct (ppss (type list)) ...) Stefan ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 19:39 ` Stefan Monnier @ 2019-10-30 20:28 ` Lars Ingebrigtsen 2019-12-13 12:34 ` Noam Postavsky 0 siblings, 1 reply; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-30 20:28 UTC (permalink / raw) To: Stefan Monnier; +Cc: emacs-devel, Dmitry Gutov Stefan Monnier <monnier@iro.umontreal.ca> writes: >> ppss-depth >> ppss-start-innermost >> ppss-start-last-complete-sexp >> ppss-string-terminator >> ppss-comment-nesting >> ppss-after-quote-character >> ppss-minimum-paren-depth >> ppss-comment-style >> ppss-start-comment-or-string >> ppss-open-paren-positions >> ppss-two-character-syntax >> ppss-internal > > Yes, please start with (cl-defstruct (ppss (type list)) ...) Done (with Dmitry's suggestions). Everybody -- feel free to bikeshed (and change any of the accessor names) before we start using these. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 20:28 ` Lars Ingebrigtsen @ 2019-12-13 12:34 ` Noam Postavsky 2019-12-13 13:03 ` Dmitry Gutov 0 siblings, 1 reply; 25+ messages in thread From: Noam Postavsky @ 2019-12-13 12:34 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: Dmitry Gutov, Stefan Monnier, Emacs developers On Wed, 30 Oct 2019 at 18:22, Lars Ingebrigtsen <larsi@gnus.org> wrote: > Done (with Dmitry's suggestions). Everybody -- feel free to bikeshed > (and change any of the accessor names) before we start using these. Is it too late to bikeshed the names? ;) I had earlier proposed some slightly shorter ones in https://debbugs.gnu.org/32504#51, posting them here as a diff. @@ -90,30 +90,30 @@ syntax-propertize-extend-region-functions (:copier nil) (:type list)) (depth nil :documentation "depth in parens") - (innermost-start + (list-start nil :documentation "character address of start of innermost containing list; nil if none.") - (last-complete-sexp-start + (last-sexp-start nil :documentation "character address of start of last complete sexp terminated.") (string-terminator nil :documentation "\ non-nil if inside a string. (it is the character that will terminate the string, or t if the string should be terminated by a generic string delimiter.)") - (comment-nesting nil :documentation "\ + (comment nil :documentation "\ nil if outside a comment, t if inside a non-nestable comment, else an integer (the current comment nesting).") - (after-quote-p nil :documentation "t if following a quote character.") - (minimum-paren-depth + (quoted-p nil :documentation "t if following a quote character.") + (min-depth nil :documentation "the minimum paren-depth encountered during this scan.") (comment-style nil :documentation "style of comment, if any.") - (comment-or-string-start + (context-start nil :documentation "character address of start of comment or string; nil if not in one.") - (open-paren-positions + (open-parens nil :documentation "List of positions of currently open parens, outermost first.") - (two-character-syntax nil :documentation "\ + (syntax-sequence nil :documentation "\ When the last position scanned holds the first character of a (potential) two character construct, the syntax of that position, otherwise nil. That construct can be a two character comment ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-12-13 12:34 ` Noam Postavsky @ 2019-12-13 13:03 ` Dmitry Gutov 2019-12-17 16:28 ` Lars Ingebrigtsen 2020-02-15 14:55 ` Noam Postavsky 0 siblings, 2 replies; 25+ messages in thread From: Dmitry Gutov @ 2019-12-13 13:03 UTC (permalink / raw) To: Noam Postavsky, Lars Ingebrigtsen; +Cc: Stefan Monnier, Emacs developers On 13.12.2019 14:34, Noam Postavsky wrote: > On Wed, 30 Oct 2019 at 18:22, Lars Ingebrigtsen <larsi@gnus.org> wrote: > >> Done (with Dmitry's suggestions). Everybody -- feel free to bikeshed >> (and change any of the accessor names) before we start using these. > > Is it too late to bikeshed the names? ;) > I had earlier proposed some slightly shorter ones in > https://debbugs.gnu.org/32504#51, posting them here as a diff. > > @@ -90,30 +90,30 @@ syntax-propertize-extend-region-functions > (:copier nil) > (:type list)) > (depth nil :documentation "depth in parens") > - (innermost-start > + (list-start Sounds ambiguous: the point is that it's innermost, among possible other list starts. > nil :documentation > "character address of start of innermost containing list; nil if none.") > - (last-complete-sexp-start > + (last-sexp-start Same (but, like, in reverse): "complete" is important. > nil :documentation > "character address of start of last complete sexp terminated.") > (string-terminator nil :documentation "\ > non-nil if inside a string. > (it is the character that will terminate the string, or t if the > string should be terminated by a generic string delimiter.)") > - (comment-nesting nil :documentation "\ > + (comment nil :documentation "\ Doesn't this name imply some other value? Like a string (comment opener or its contents)? > - (comment-or-string-start > + (context-start > nil :documentation > "character address of start of comment or string; nil if not in one.") That kind of implies that strings and comments are the most important contexts when parsing a file. > - (open-paren-positions > + (open-parens > nil :documentation > "List of positions of currently open parens, outermost first.") > - (two-character-syntax nil :documentation "\ > + (syntax-sequence nil :documentation "\ > When the last position scanned holds the first character of a > (potential) two character construct, the syntax of that position, > otherwise nil. That construct can be a two character comment These look okay to me. min-depth too, but, like last-complete-sexp-start, these fields in values returned by syntax-ppss are unreliable/undefined, so they won't be used in most Lisp programs anyway. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-12-13 13:03 ` Dmitry Gutov @ 2019-12-17 16:28 ` Lars Ingebrigtsen 2020-02-15 14:55 ` Noam Postavsky 1 sibling, 0 replies; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-12-17 16:28 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Emacs developers, Noam Postavsky, Stefan Monnier Dmitry Gutov <dgutov@yandex.ru> writes: >> - (open-paren-positions >> + (open-parens >> nil :documentation >> "List of positions of currently open parens, outermost first.") >> - (two-character-syntax nil :documentation "\ >> + (syntax-sequence nil :documentation "\ >> When the last position scanned holds the first character of a >> (potential) two character construct, the syntax of that position, >> otherwise nil. That construct can be a two character comment > > These look okay to me. Yes, I think so, too. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-12-13 13:03 ` Dmitry Gutov 2019-12-17 16:28 ` Lars Ingebrigtsen @ 2020-02-15 14:55 ` Noam Postavsky 2020-02-15 15:14 ` Dmitry Gutov 1 sibling, 1 reply; 25+ messages in thread From: Noam Postavsky @ 2020-02-15 14:55 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Lars Ingebrigtsen, Stefan Monnier, Emacs developers On Fri, 13 Dec 2019 at 08:03, Dmitry Gutov <dgutov@yandex.ru> wrote: >> - (innermost-start >> + (list-start > > Sounds ambiguous: the point is that it's innermost, among possible other > list starts. >> - (last-complete-sexp-start >> + (last-sexp-start > > Same (but, like, in reverse): "complete" is important. Not sure I agree, but I can live with the current names. > > - (comment-nesting nil :documentation "\ > > + (comment nil :documentation "\ > > Doesn't this name imply some other value? Like a string (comment opener > or its contents)? Hmm, you might be right about that. How about 'comment-depth': two characters shorter, and the other names also use "depth" rather than "nesting". > > - (comment-or-string-start > > + (context-start > > nil :documentation > > "character address of start of comment or string; nil if not in one.") > > That kind of implies that strings and comments are the most important > contexts when parsing a file. Yeah, I think was I looking at syntax-ppss-context when I originally wrote this, but in that case there is an argument to tell what "context" refers to, so I agree it doesn't really make sense here. > > - (open-paren-positions > > + (open-parens > > nil :documentation > > "List of positions of currently open parens, outermost first.") > > - (two-character-syntax nil :documentation "\ > > + (syntax-sequence nil :documentation "\ > > When the last position scanned holds the first character of a > > (potential) two character construct, the syntax of that position, > > otherwise nil. That construct can be a two character comment > > These look okay to me. I'm actually feeling that the two-character-syntax one should be left as is, it's kind of obscure so having a longer and more explicit name seems better. > min-depth too, but, like last-complete-sexp-start, these fields in > values returned by syntax-ppss are unreliable/undefined, so they won't > be used in most Lisp programs anyway. I might be biased by having worked on the lisp indentation code which uses those fields quite a bit. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2020-02-15 14:55 ` Noam Postavsky @ 2020-02-15 15:14 ` Dmitry Gutov 2020-02-15 16:23 ` Noam Postavsky 0 siblings, 1 reply; 25+ messages in thread From: Dmitry Gutov @ 2020-02-15 15:14 UTC (permalink / raw) To: Noam Postavsky; +Cc: Lars Ingebrigtsen, Stefan Monnier, Emacs developers On 15.02.2020 16:55, Noam Postavsky wrote: >>> - (comment-nesting nil :documentation "\ >>> + (comment nil :documentation "\ >> >> Doesn't this name imply some other value? Like a string (comment opener >> or its contents)? > > Hmm, you might be right about that. How about 'comment-depth': two > characters shorter, and the other names also use "depth" rather than > "nesting". Sounds good. >>> - (open-paren-positions >>> + (open-parens >>> nil :documentation >>> "List of positions of currently open parens, outermost first.") >>> - (two-character-syntax nil :documentation "\ >>> + (syntax-sequence nil :documentation "\ >>> When the last position scanned holds the first character of a >>> (potential) two character construct, the syntax of that position, >>> otherwise nil. That construct can be a two character comment >> >> These look okay to me. > > I'm actually feeling that the two-character-syntax one should be left > as is, it's kind of obscure so having a longer and more explicit name > seems better. Agree (I also have never used it). >> min-depth too, but, like last-complete-sexp-start, these fields in >> values returned by syntax-ppss are unreliable/undefined, so they won't >> be used in most Lisp programs anyway. > > I might be biased by having worked on the lisp indentation code which > uses those fields quite a bit. So... Lisp indentation code calls parse-partial-sexp directly? Anyway, I said min-depth is okay, but if we're going to have comment-depth, maybe min-depth starts to sound more ambiguous. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2020-02-15 15:14 ` Dmitry Gutov @ 2020-02-15 16:23 ` Noam Postavsky 2020-02-23 14:11 ` Noam Postavsky 0 siblings, 1 reply; 25+ messages in thread From: Noam Postavsky @ 2020-02-15 16:23 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Lars Ingebrigtsen, Stefan Monnier, Emacs developers On Sat, 15 Feb 2020 at 10:14, Dmitry Gutov <dgutov@yandex.ru> wrote: > >> min-depth too, but, like last-complete-sexp-start, these fields in > >> values returned by syntax-ppss are unreliable/undefined, so they won't > >> be used in most Lisp programs anyway. > > > > I might be biased by having worked on the lisp indentation code which > > uses those fields quite a bit. > > So... Lisp indentation code calls parse-partial-sexp directly? Yes, syntax-ppss isn't useful there because changing the indentation invalidates the cache. > Anyway, I said min-depth is okay, but if we're going to have > comment-depth, maybe min-depth starts to sound more ambiguous. I don't think so, unqualified "depth" refers to parens, as in the 0th field. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2020-02-15 16:23 ` Noam Postavsky @ 2020-02-23 14:11 ` Noam Postavsky 0 siblings, 0 replies; 25+ messages in thread From: Noam Postavsky @ 2020-02-23 14:11 UTC (permalink / raw) To: Dmitry Gutov; +Cc: Lars Ingebrigtsen, Stefan Monnier, Emacs developers I've pushed my changes to emacs-27. [1: ba7004b2a7]: 2020-02-23 09:03:18 -0500 Shorten some ppss struct field names https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=ba7004b2a74c69450114c12ef4521768fc165e8e ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:29 ` Lars Ingebrigtsen 2019-10-30 16:13 ` Dmitry Gutov 2019-10-30 19:39 ` Stefan Monnier @ 2019-10-30 20:34 ` Alan Mackenzie 2019-10-30 20:41 ` Dmitry Gutov ` (2 more replies) 2 siblings, 3 replies; 25+ messages in thread From: Alan Mackenzie @ 2019-10-30 20:34 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel, Dmitry Gutov Hello, Lars. On Wed, Oct 30, 2019 at 16:29:44 +0100, Lars Ingebrigtsen wrote: > Lars Ingebrigtsen <larsi@gnus.org> writes: > > So perhaps that patch should be reverted anyway. Or have the list in > > both functions. Or, even better, stop saying > > (if (nth 5 state) > > (do-something-incomprehensible) > > (do-something-else-incomprehensible)) > > everywhere and just add accessor functions already, so that the code > > becomes marginally more readable. Because trying to make sense of it > > now is just too hard, and it doesn't have to be. > If we want to do this, I volunteer to start doing the rewrite -- I have > some functions for this from the decoded time makeover... > So what would the accessor macros be? Err... looking at the doc > string, something like: > ppss-depth > ppss-start-innermost > ppss-start-last-complete-sexp > ppss-string-terminator > ppss-comment-nesting > ppss-after-quote-character > ppss-minimum-paren-depth > ppss-comment-style > ppss-start-comment-or-string > ppss-open-paren-positions > ppss-two-character-syntax > ppss-internal For a start, why the prefix "ppss-"? The values are the results of calling parse-partial-sexp (however indirectly), so "pps-" would be more accurate, as well as being a character shorter. But I'm thoroughly against this change. It's bloat. On a good day, (or (nth 3 s) (nth 4 s)) will easily fit onto a single line of code, often with room for a comment such as "; in a string or comment.". (or (pps-string-terminator s) (pps-comment-nesting s)) is much less likely to do so. So we end up with an extra line, whether a continuation line added by redisplay, or a real extra line added by the hacker. In either case this is undesirable. I doubt these macros will be easier to read than the use of nth. They are too long to be instantly recognised - the eye and the brain must scan them piece by piece. (nth 3 s) can be a mental atom, requiring no effort. In practice, by far most of the accesses to the state returned by parse-partial-sexp are elements 3, 4, and 8, so anybody using parse-partial-sexp quickly learns what these mean. Others can be explained by comments, if needed. Anybody who doesn't recognise elts 3, 4, and 8 is probably best advised to read the pertinent manual page anyway. These new macro names would be a burden to learn and use, and a burden on the Emacs Lisp manual. Please don't do this. > -- > (domestic pets only, the antidote for overdose, milk.) > bloggy blog: http://lars.ingebrigtsen.no -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 20:34 ` Alan Mackenzie @ 2019-10-30 20:41 ` Dmitry Gutov 2019-10-31 1:45 ` Stefan Monnier 2019-10-31 14:06 ` Lars Ingebrigtsen 2 siblings, 0 replies; 25+ messages in thread From: Dmitry Gutov @ 2019-10-30 20:41 UTC (permalink / raw) To: Alan Mackenzie, Lars Ingebrigtsen; +Cc: emacs-devel On 30.10.2019 22:34, Alan Mackenzie wrote: > In practice, by far most of the accesses to the state returned by > parse-partial-sexp are elements 3, 4, and 8, so anybody using > parse-partial-sexp quickly learns what these mean. Right. TBH, I'm not in any hurry to start using them myself. But I've seen others ask for these, so maybe it's a good thing, at least to have them available. ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 20:34 ` Alan Mackenzie 2019-10-30 20:41 ` Dmitry Gutov @ 2019-10-31 1:45 ` Stefan Monnier 2019-10-31 14:06 ` Lars Ingebrigtsen 2 siblings, 0 replies; 25+ messages in thread From: Stefan Monnier @ 2019-10-31 1:45 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Lars Ingebrigtsen, Dmitry Gutov, emacs-devel > For a start, why the prefix "ppss-"? Not sure why he chose it, but I chose "ppss" in "syntax-ppss" because it stores a "parse-parial-sexp state". Stefan ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 20:34 ` Alan Mackenzie 2019-10-30 20:41 ` Dmitry Gutov 2019-10-31 1:45 ` Stefan Monnier @ 2019-10-31 14:06 ` Lars Ingebrigtsen 2 siblings, 0 replies; 25+ messages in thread From: Lars Ingebrigtsen @ 2019-10-31 14:06 UTC (permalink / raw) To: Alan Mackenzie; +Cc: Dmitry Gutov, emacs-devel Alan Mackenzie <acm@muc.de> writes: > For a start, why the prefix "ppss-"? The values are the results of > calling parse-partial-sexp (however indirectly), so "pps-" would be more > accurate, as well as being a character shorter. As syntax.el says: ;; Note: PPSS stands for `parse-partial-sexp state' > I doubt these macros will be easier to read than the use of nth. They > are too long to be instantly recognised - the eye and the brain must > scan them piece by piece. (nth 3 s) can be a mental atom, requiring no > effort. No, (nth 3 s) can mean anything. You first have to backtrack up the code to see what s is, then go to the doc string for syntax-ppss, and then go to the doc string for parse-partial-sexp to see what it means. > In practice, by far most of the accesses to the state returned by > parse-partial-sexp are elements 3, 4, and 8, so anybody using > parse-partial-sexp quickly learns what these mean. Others can be > explained by comments, if needed. Anybody who doesn't recognise elts 3, > 4, and 8 is probably best advised to read the pertinent manual page > anyway. I think that's a kinda elitist way of looking at it. If you don't understand obscure code, there's nothing wrong with you -- there's something wrong with the code. Font locking is something normal users should be able to understand, because it's something that's very visual, has an immediate impact, and can be tweaked endlessly. But reading the code today is much harder than it has to be, and my guess is that many people will just bail when presented with code like ;; Find each interesting place between here and `end'. (while (progn (when (or (nth 3 state) (nth 4 state)) (setq face (funcall font-lock-syntactic-face-function state)) ... I think we had the same discussion with decoded time accessors? That was a minor understandability hurdle compared to ppss -- at least there you could sort of guess what they were because they were increasing (minutes higher than seconds). The ppss nths are completely inscrutable. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no ^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: master 305dbc7 2/4: Move description of value to syntax-ppss function. 2019-10-30 15:22 ` Lars Ingebrigtsen 2019-10-30 15:26 ` Dmitry Gutov 2019-10-30 15:29 ` Lars Ingebrigtsen @ 2019-10-30 20:47 ` Alan Mackenzie 2 siblings, 0 replies; 25+ messages in thread From: Alan Mackenzie @ 2019-10-30 20:47 UTC (permalink / raw) To: Lars Ingebrigtsen; +Cc: emacs-devel, Dmitry Gutov Hello, Lars. On Wed, Oct 30, 2019 at 16:22:50 +0100, Lars Ingebrigtsen wrote: > Dmitry Gutov <dgutov@yandex.ru> writes: > > Point is, in parse-partial-sexp the *can* be relied upon. Though I'm > > not sure how often they are used. > Yes, the doc string certainly implies that they can be relied upon if > you use that function instead. > On the other hand, perhaps I shouldn't have moved it -- > parse-partial-sexp is used a lot, too. I was only seeing syntax-ppss > everywhere, but I see that it's used less than 2x as much. More to the point, parse-partial-sexp is a primitive, an essential function upon which much is built. It MUST be documented, including its return value. syntax-ppss is not an essential function, though it might be necessary nowadays; it has had and still has its problems. > So perhaps that patch should be reverted anyway. Or have the list in > both functions. .... I think either alternative would be good. [ .... ] > -- > (domestic pets only, the antidote for overdose, milk.) > bloggy blog: http://lars.ingebrigtsen.no -- Alan Mackenzie (Nuremberg, Germany). ^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2020-02-23 14:11 UTC | newest] Thread overview: 25+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20191030121649.15369.13207@vcs0.savannah.gnu.org> [not found] ` <20191030121651.BFCF8204DF@vcs0.savannah.gnu.org> 2019-10-30 14:59 ` master 305dbc7 2/4: Move description of value to syntax-ppss function Dmitry Gutov 2019-10-30 15:03 ` Lars Ingebrigtsen 2019-10-30 15:13 ` Dmitry Gutov 2019-10-30 15:22 ` Lars Ingebrigtsen 2019-10-30 15:26 ` Dmitry Gutov 2019-10-30 15:30 ` Lars Ingebrigtsen 2019-10-30 15:29 ` Lars Ingebrigtsen 2019-10-30 16:13 ` Dmitry Gutov 2019-10-30 16:17 ` Lars Ingebrigtsen 2019-10-30 16:47 ` Dmitry Gutov 2019-10-30 17:03 ` Lars Ingebrigtsen 2019-10-30 19:39 ` Stefan Monnier 2019-10-30 20:28 ` Lars Ingebrigtsen 2019-12-13 12:34 ` Noam Postavsky 2019-12-13 13:03 ` Dmitry Gutov 2019-12-17 16:28 ` Lars Ingebrigtsen 2020-02-15 14:55 ` Noam Postavsky 2020-02-15 15:14 ` Dmitry Gutov 2020-02-15 16:23 ` Noam Postavsky 2020-02-23 14:11 ` Noam Postavsky 2019-10-30 20:34 ` Alan Mackenzie 2019-10-30 20:41 ` Dmitry Gutov 2019-10-31 1:45 ` Stefan Monnier 2019-10-31 14:06 ` Lars Ingebrigtsen 2019-10-30 20:47 ` Alan Mackenzie
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).