|
6 | 6 | (require string-constants |
7 | 7 | racket/class |
8 | 8 | racket/string |
| 9 | + racket/promise |
9 | 10 | mred/mred-sig |
10 | 11 | syntax-color/module-lexer |
| 12 | + syntax-color/racket-lexer |
11 | 13 | syntax-color/racket-indentation |
12 | 14 | syntax-color/racket-navigation |
13 | 15 | "collapsed-snipclass-helpers.rkt" |
|
1365 | 1367 | (|{| |}|))) |
1366 | 1368 |
|
1367 | 1369 | (define (wrap-get-token get-token- get-tabify-pref) |
| 1370 | + (define (set-type-sym type sym) (if (hash? type) (hash-set type 'type sym) sym)) |
| 1371 | + (define (type-val type key) (and (hash? type) (hash-ref type key #f))) |
1368 | 1372 | (define wrapped-get-token |
1369 | 1373 | (cond |
1370 | 1374 | [(procedure-arity-includes? get-token- 3) |
1371 | 1375 | (λ (in offset mode) |
1372 | 1376 | (define-values (lexeme type paren start end backup-delta new-mode) |
1373 | | - (get-token- in offset mode)) |
| 1377 | + (parameterize ([current-lexeme->semantic-type-guess (make-lexeme->semantic-type-guess get-tabify-pref)]) |
| 1378 | + (get-token- in offset mode))) |
1374 | 1379 | (cond |
1375 | | - [(and (eq? type 'symbol) |
1376 | | - (string? lexeme) |
1377 | | - (get-head-sexp-type-from-prefs lexeme (get-tabify-pref))) |
1378 | | - (values lexeme 'keyword paren start end backup-delta new-mode)] |
| 1380 | + [(memq (type-val type 'semantic-type-guess) '(keyword builtin)) |
| 1381 | + (values lexeme (set-type-sym type 'keyword) paren start end backup-delta new-mode)] |
1379 | 1382 | [else |
1380 | 1383 | (values lexeme type paren start end backup-delta new-mode)]))] |
1381 | 1384 | [else |
1382 | 1385 | (λ (in) |
1383 | | - (define-values (lexeme type paren start end) (get-token- in)) |
| 1386 | + (define-values (lexeme type paren start end) |
| 1387 | + (parameterize ([current-lexeme->semantic-type-guess (make-lexeme->semantic-type-guess get-tabify-pref)]) |
| 1388 | + (get-token- in))) |
1384 | 1389 | (cond |
1385 | | - [(and (eq? type 'symbol) |
1386 | | - (string? lexeme) |
1387 | | - (get-head-sexp-type-from-prefs lexeme (get-tabify-pref))) |
1388 | | - (values lexeme 'keyword paren start end)] |
| 1390 | + [(memq (type-val type 'semantic-type-guess) '(keyword builtin)) |
| 1391 | + (values lexeme (set-type-sym type 'keyword) paren start end)] |
1389 | 1392 | [else |
1390 | 1393 | (values lexeme type paren start end)]))])) |
1391 | 1394 | (procedure-rename wrapped-get-token |
|
1397 | 1400 | (define (get-head-sexp-type-from-prefs text pref) |
1398 | 1401 | ((racket-tabify-table->head-sexp-type pref) text)) |
1399 | 1402 |
|
| 1403 | +(define (make-lexeme->semantic-type-guess get-tabify-pref) |
| 1404 | + (let ([lexeme->head-sexp-type/promise (delay (racket-tabify-table->head-sexp-type (get-tabify-pref)))]) |
| 1405 | + (lambda (lexeme) |
| 1406 | + (and ((force lexeme->head-sexp-type/promise) lexeme) 'keyword)))) |
1400 | 1407 |
|
1401 | 1408 | ;; in-position? : text (list symbol) -> boolean |
1402 | 1409 | ;; determines if the cursor is currently sitting in a particular |
|
0 commit comments