I think that it is usually done by a c_trace. If it hitted an other entity, the you pointer is set to that entity and you can do what ever you want with it. c_scan should work, too.
Set the sword to 'passable' and do a trace every frame (while you swing it) from the bottom of the blade to the tip of it. Set the trace_mode 'activate_shoot' to have an indicator for the other entity if it was hit by a sword trace or just another trace