Open metametadata opened 7 years ago
I don't know about on hover, but I have my editor set up so when I click on a symbol it is highlighted throughout the file in bright yellow.
Yes, this is what I need, but unfortunately the IDE doesn't yet highlight the same Clojure symbols starting with '
, e.g. the same 'foo
"token" will not be highlighted everywhere when under caret.
@metametadata So the issue is that they're not highlighted when quoted?
@cursive-ide exactly. Some context: for my exotic use case I need something resembling keywords but also having metadata. So that instead of :foo
keyword I would use 'foo
symbol. And to make it usable I'd like IDE to highlight same 'foo
symbols in the same fashion it would highlight same :foo
keywords.
Still very interested in this landing.
Hi,
This is just a suggestion. I had taken a similar approach when I found I wanted to add metadata to keywords. Later, I found using Vars instead of symbols to be more useful as it fits better with Cursive's navigation, refactoring and documentation lookup support.
(def ^{:some :metadata} foo "foo documentation" 'foo)
Then use #'foo where you use 'foo now and IDEA will highlight usages, navigate from usages to the definition and show documentation with the View -> Quick Documentation function.
Of course, this may not fit your needs if your metadata isn't static.
Paudi
On Wed, 23 May 2018 at 23:12 Yuri Govorushchenko notifications@github.com wrote:
Still very interested in this landing.
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/cursive-ide/cursive/issues/1799#issuecomment-391513304, or mute the thread https://github.com/notifications/unsubscribe-auth/AAFh8rbDTRvKwmEgDcK4poLHL-sqBdkcks5t1d7VgaJpZM4ORtxE .
@pmoriarty thank you for a suggestion. I could take this approach but in the specific case I have I'd really like to compress the number of lines of code and not define any new symbols.
In unit tests I use "metaconsts" a lot, i.e. instead of some-real-data
I often can pass :--keywords--
around without breaking a test scenario when implemetation doesn't care about data content. Simple pseudo example:
(deftest logic-layer-adds-item-via-db-layer
(let [db (fake-add-db :--item-to-add-- :--added-item--)
logic (->Logic db)]
(is (= :--added-item-- (add logic :--item-to-add--)))))
The next idea is to preserve this approach for testing functions with specs/schemas defined for args and return values.
E.g. I managed to patch Schema lib so that I can write tests with "metaconsts with schema hints". Type hints are attached to metaconsts using <<
helper. So that if [patched] Schema validator encounters a value which has a schema hint in metadata then it doesn't look at the actual value content and just "believes" it is of the type declared in metadata. Example:
; Now db and logic layers have Schemas attached to arguments and return values
(deftest logic-layer-adds-item-via-db-layer
(let [db (fake-add-db (<< '--item-to-add-- ItemToAddSchema) (<< '--added-item-- ItemSchema))
logic (->Logic db)]
; Note that I don't have to schema hint '--added-item-- here because
; (<< '--added-item-- ItemSchema) == '--added-item--
(is (= '--added-item-- (add logic (<< '--item-to-add-- ItemSchema))))))
So this is why I need highlighting - to be able to read the tests cases like this easier.
I could use keywords with this trick instead to get the highlighting. But the tests are more noisey then since I'd need to wrap every metaconst with (<< ...)
because keywords don't have metadata.
Edit: I should add it depends on the test and sometimes it can be worthwhile to extract item-to-add
, etc. as local vars for readibility even though it adds an additional line to test.
Update: I no longer need such a feature. Instead of '--added-item--
I write (! --added-item--)
(!
is a function).
But such highlighting seems reasonable, so I'm not sure the issue should be closed.
I think it would be logical if IDE highlighted the same symbols in the file, similarly to keywords (i.e. when the cursor is over the keyword all the occurrences of this keyword are highlighted in current editor tab).
I'm thinking about moving from using keywords to symbols in the specific part of the codebase and would definitely benefit from such feature.